実数をチェックするために、このコードで何が間違っているのか知りたいです。
var regex = new RegExp(/([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)/g);
var invalid = this.value.match(regex);
上記の表現は私にはうまくいきません
([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)
テスターで動作します。
実数をチェックするために、このコードで何が間違っているのか知りたいです。
var regex = new RegExp(/([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)/g);
var invalid = this.value.match(regex);
上記の表現は私にはうまくいきません
([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)
テスターで動作します。
行う
var regex = new RegExp("([0-9]+[.|,][0-9])|([0-9][.|,][0-9]+)|([0-9]+)/g);([0-9]+[.|,][0-9])|([0-9][.|,][0-9]+)|([0-9]+)", 'g');
また
var regex = /([0-9]+[.|,][0-9])|([0-9][.|,][0-9]+)|([0-9]+)/g;
2つの構成が可能です:new RegExp(string,'g')
または/somestring/g
。それらを混ぜないでください。一定の正規表現の場合、プリコンパイルされているため、2番目の正規表現を選択する方が効率的です。
MDNドキュメントを参照してください
まず第一にnew RegExp()
、文字列内にない正規表現に対して行う必要はありません。
/regexp/rule
またnew RegExp("regexp", "rule");
第二に:
[0-9]
を使用できるのに、なぜ使用するの\d
ですか?
三番:
なぜ使うの[.|,]
ですか?一致しますか | 同じように?[.,]
あなたが達成したい仕事をするでしょう。
第4:
これを数値文字列と照合します。/^(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/
あなたはこのようにすることができます:
var regexp = /^(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/;
alert(regexp.test("0")); // true
alert(regexp.test("1")); // true
alert(regexp.test("01")); // false (or check out the regex at the bottom)
alert(regexp.test("123")); // true
alert(regexp.test("1234")); // false
alert(regexp.test("123,4")); // false
alert(regexp.test("123,456,789,012")); // true
alert(regexp.test("123,456,789,012.")); // false
alert(regexp.test("123,456,789,012.12341324")); // true
alert(regexp.test("0.12341324")); // true
0,000,000.0000 のようなものと一致させたい場合は、次の正規表現を使用できます。
/^\d{1,3}(?:,\d{3})*(?:\.\d+)?$/
+- が必要な場合は、前に Bergi が言及したものを追加できます。私の正規表現は次のようになります。
/^[+-]?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/
また:/^[+-]?(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/
Bergiが述べたように、あなたは持っている方法を知っているべきです. をグループ化演算子として、 を区切り文字として使用します。そのためには、と,
を置き換えるだけです\.
\.
,
、および を置換した式があります。
/^?\d{1,3}(?:\.\d{3})*(?:,\d+)?$/ <- matches 00,000,000.00000
/^?(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d+)?$/ <- matches 1,123,123,123.1234
/^[+-]?\d{1,3}(?:\.\d{3})*(?:,\d+)?$/ <- matches -00,000.0
/^[+-]?(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d+)?$/ <- matches -12,123.12345
私はこれを提案します:
/[+-]?(?:\d*[.,])?\d+/
\d
の代わりにショートカットを使用します[0-9]
。また、パイプを小数点記号として一致させたくないと思います。角かっこは文字クラスを定義します。このクラスでは、特殊文字はその意味を失います(.
エスケープする必要|
はなく、ORを意味するわけではありません)-おそらく意味し(\.|,)
ます。また、10進数のないfloaを本当に一致させたいかどうかもわかりません(例"12,"
)-省略しました。最初はオプションのサインを許可しました。