1

私はそのような正規表現を持っています:

var pat = new RegExp("[0-9]{1}\.[0-9]{1}");

私はjQueryを使用して、テキストボックスから数値を取得します。

var theValue = $(item).val();

私は数字を入力し、次の行で正規表現をテストしています:

alert(pat.test(theValue));

番号.111を入力すると、合格します。最初の桁は0〜9で、その後にピリオドが続き、その後に別の桁が0〜9である必要があるため、これは当てはまりません。何が間違っているのかわかりません。

4

5 に答える 5

6

文字列で使用するには\、円記号を表示するためにをエスケープする必要があります。

var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");

より簡潔で、おそらくより信頼性の高い形式は次のようになります。

/[0-9]\.[0-9]/

パターンが単一の数字、ピリオド、別の単一の数字と一致する必要があると仮定します。

于 2012-10-02T20:31:04.620 に答える
5

バックスラッシュは、正規表現のエスケープではなく、文字列のエスケープを実行しています。次のいずれかを使用します。

new RegExp("[0-9]{1}\\.[0-9]{1}");

または、多くの人が優先するスラッシュ(Re​​gExpリテラル)構文:

/[0-9]{1}\.[0-9]{1}/

編集:また、ianpgallが上で指摘しているように、文字クラス[0-9]は。が後に続かない限り怠惰ではないため、{1}は必要ありません?

于 2012-10-02T20:31:34.633 に答える
3

これは、引用符の代わりにスラッシュを使用して正規表現を記述した場合に正常に機能します

var pat = /[0-9]{1}\.[0-9]{1}/;
var theValue = ".111";
alert(pat.test(theValue));
​

そして、私は\d代わりに使用します[0-9]

文字列内のあなたは、正規表現ではなく、文字列内\.でエスケープしていました。.つまり、正規表現は事実上[0-9]{1}.[0-9]{1}、数字、何でも、そして別の数字と一致していました。数字、ピリオド、数字の代わりに。

于 2012-10-02T20:33:32.223 に答える
0

ベストアンサーを見た後、ほとんどの場合に対応できるように、もう少し強化することを考えました。

var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");
var theValue = $("#item").val();
if (theValue.length == 3)
    alert(pat.test(theValue));
else
    alert("false");

ライブデモを参照

于 2012-10-02T20:48:55.907 に答える
0

式を固定するのを忘れました。

var pat = new RegExp("^[0-9]{1}\.[0-9]{1}$");
于 2012-10-02T20:31:03.967 に答える