3

実数をチェックするために、このコードで何が間違っているのか知りたいです。

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]+) 

テスターで動作します。

4

3 に答える 3

5

行う

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ドキュメントを参照してください

于 2012-10-16T16:41:47.943 に答える
3

まず第一に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
于 2012-10-16T16:56:24.347 に答える
1

私はこれを提案します:

/[+-]?(?:\d*[.,])?\d+/

\dの代わりにショートカットを使用します[0-9]。また、パイプを小数点記号として一致させたくないと思います。角かっこは文字クラスを定義します。このクラスでは、特殊文字はその意味を失います(.エスケープする必要|はなく、ORを意味するわけではありません)-おそらく意味し(\.|,)ます。また、10進数のないfloaを本当に一致させたいかどうかもわかりません(例"12,")-省略しました。最初はオプションのサインを許可しました。

于 2012-10-16T17:09:17.507 に答える