2016-03-29 19 views
0

javascriptで(bootstrap/jqueryを使用して)フォームフィールドを検証しようとしていますが、コンマで区切られた数字のリストである文字列に一致する正規表現が必要です。スペースではない。彼らはすべての整数との間にはスペースであれば、私は正規表現を得ることができます 1,2,3,3.14,6.0、-3.14、-6、7.13,100コンマで区切られた浮動小数点数のリストの正規表現

、本当に小数を持つ:

例物事を複雑にする。

答えて

3

あなたはこの試みることができる:あなたは上記の正規表現を破る場合

^(\s*-?\d+(\.\d+)?)(\s*,\s*-?\d+(\.\d+)?)*$ 

document.write(
 
    /^(\s*-?\d+(\.\d+)?)(\s*,\s*-?\d+(\.\d+)?)*$/.test(
 
     '1,2,3,3.14,6.0, -3.14, -6, 7.13,100' 
 
    ) 
 
);

を、文字列wの最初の数字をキャプチャしていることがわかりますi番目:

(\s*-?\d+(\.\d+)?) 

、それは続いて、少なくとも一つの数値桁\d+続い任意ハイフン(または負の符号)-?続いて必要な数の連続したスペース\s*をマッチングしようとすると、最初の番号をキャプチャします小数点以下に連続した数字の数字が1つ以上ある任意の小数点(\.\d+)?

次のグループは、最初のグループに続くすべての番号を取得します。

(\s*,\s*-?(\d+(\.\d+)?)* 

は前に追加\s*,がカンマ,に一致する前に必要\s*限り多くのスペースを可能にする以外前のグループと同じです。このグループは必要な回数だけ繰り返されます*

正規表現は、^で始まり、それが文字列$の終わりまでの文字列^の先頭から一致始まりを確認する$で終わります。

+0

それはそれをしました!私はその日のことを理解しようとしている現場の日を過ごすつもりです。 – jon

+0

'(\ d + \。\ d +)| \ d +'を '\ d +(?:\。\ d +)に減らしますか? ' –

+0

良いポイント@AvinashRaj –

2

正規表現は必須ではありません場合は、

この単純なロジックを試してみてください
function isValidInput(str) 
{ 
    return str.split(",").filter(function(val){ return isNaN(val) }).length == 0; 
} 
isValidInput("1,2,3,3.14,6.0, -3.14, -6, 7.13,100"); 
+0

正規表現を試すことができますが必須である場合は、フィールドの値と一致するパターンマッチングを使用して検証します。 – jon

0

@ gurvinder372の回答の代わりに、Array.filterの代わりにArray.everyを使用できます。利点、それは最後までループしないで、最初の無効なエントリで壊れます。しかし、間違った値をすべて取得したい場合は、@ gurvinder372の答えが優先されます。

function isValidInput(str) { 
 
    return str.split(",").every(function(val) { 
 
    return !isNaN(val); 
 
    }) 
 
} 
 
var test = isValidInput("1,2,3,3.14,6.0, -3.14, -6, 7.13,100"); 
 

 
alert(test);

0

あなたはこの

^(\s*(-|\+)?\d+(?:\.\d+)?\s*,\s*)+(-|\+)?\d+(?:\.\d+)?\s*$ 

正規表現の内訳

^ ---> Starting of string 
    (\s* ---> Match any number of white spaces 
    (-|\+)? ---> Match - or + sign (optional) 
    \d+ ---> Match digits before decimal 
    (?:\.\d+)? ---> Non capturing group to match digits after decimal(optional) 
    \s*,\s* ---> Match any number of spaces before and after comma 
)+ ---> Do this till last comma (or second last number) 

    (-|\+)?\d+(?:\.\d+)? ---> Same as above but for checking only the last number as it should not have comma 
    \s* ---> Check spaces after last number 
$ ---> End of string 

Demo

関連する問題