2011-10-18 9 views

答えて

2

文字列の先頭と末尾に一致するアンカーが必要です。

var a = new RegExp("^0x[a-fA-F0-9]+$") 

そうでなければ、あなたの正規表現が0x1一部と一致し、trueを返します。これは、正規表現ではなく、文字列の部分だけの全体ストリングとのマッチングを試みるようになります。別のノートで

は、次のことが少し良くなります:あなたは a-fA-Fを指定する必要はありませんので、

var re = /^0x[a-f0-9]+$/i; 

iフラグは大文字と小文字を区別します。

1

あなたの正規表現にはアンカーがないため、その文字列と一致します。正規表現を^0x[a-fA-F0-9]+$に変更すると、文字列0x1nは一致しません。

編集:さらに、なぜあなたの文字列の一致を説明するために、あなたの正規表現は、実際に[a-fA-F0-9]文字クラス内の1つの以上の文字が続く0xを含む文字列にマッチしようとしています。文字列0x1nには0xが続き、1という文字クラスがあります。文字クラスは[a-fA-F0-9]です。

アンカーを追加すると、文字列は0xで始まり、その後、[a-fA-F0-9]文字クラスの1つ以上の文字で終了する必要があります。 0x1nは、その文字クラスに含まれていないnで終了するため、一致しません。

+0

デリミタ?あなたはアンカーを意味しますか? :) –

+0

私はあなたが何について話しているのかわからない:...-) – CanSpice

1

文字列全体がそのパターンと一致する必要がないため、trueを返します。これを試してください:

var a = new RegExp("^0x[a-fA-F0-9]+$") 
関連する問題