3

入力が 8 つの 16 進数文字で始まり、その後にアンダースコアが続き、その後に任意の値を持つ任意の数のチャーターが続くかどうかを検証したいと考えています。

現在、次の正規表現を使用しています。

preg_match('/^[0-9A-Fa-f]{8}_*/', $value);

しかし、この式は次のように動作するため、私のニーズを満たしていません

結果:

1A345678            (true)
1A345678_add        (true)
1234567890          (true)
ABSDBASDB           (false)

期待される結果:

1A345678            (false)
1A345678_add        (true)
1234567890          (false)
ABSDBASDB           (false)

正規表現の何が問題になっていますか?

4

3 に答える 3

8

あなたはちょうど欠けています.

preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);

あなた_*と 0 個以上のアンダースコアが一致していました。*直前の文字またはグループを 0 回以上繰り返す量指定子です。そのため、末尾にアンダースコアがない文字列にも一致します (_ の繰り返しは 0)

.正規表現の特殊文字で、任意の文字に一致します (デフォルトでは改行を除く)

于 2013-03-05T10:29:30.337 に答える
2

*: を削除してみてください。

preg_match('/^[0-9A-Fa-f]{8}_/', $value);
于 2013-03-05T10:29:06.753 に答える
1

アンダースコアの後に * を .* に置き換えます

preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);
于 2013-03-05T10:30:11.067 に答える