を返します。この場合、jQueryの正規表現は、私が16進値の文字列を検証するためにjQueryを使って、次のコードを使用しようとしているが、私は予期しない結果を得る予期しない結果に
var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')
、結果は実際にtrueを返します。私はここで何が欠けていますか?
を返します。この場合、jQueryの正規表現は、私が16進値の文字列を検証するためにjQueryを使って、次のコードを使用しようとしているが、私は予期しない結果を得る予期しない結果に
var a = new RegExp("0x[a-fA-F0-9]+")
var result = a.test('0x1n')
、結果は実際にtrueを返します。私はここで何が欠けていますか?
文字列の先頭と末尾に一致するアンカーが必要です。
var a = new RegExp("^0x[a-fA-F0-9]+$")
そうでなければ、あなたの正規表現が0x1
一部と一致し、true
を返します。これは、正規表現ではなく、文字列の部分だけの全体ストリングとのマッチングを試みるようになります。別のノートで
a-f
と
A-F
を指定する必要はありませんので、
var re = /^0x[a-f0-9]+$/i;
i
フラグは大文字と小文字を区別します。
あなたの正規表現にはアンカーがないため、その文字列と一致します。正規表現を^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
で終了するため、一致しません。
文字列全体がそのパターンと一致する必要がないため、trueを返します。これを試してください:
var a = new RegExp("^0x[a-fA-F0-9]+$")
デリミタ?あなたはアンカーを意味しますか? :) –
私はあなたが何について話しているのかわからない:...-) – CanSpice