3

我想验证我的输入是否以 8 个十六进制字符开头,后跟一个下划线,然后是任意数量的任意值的章程。

我目前使用以下正则表达式:

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 回答