PHP中的正则表达式帮助(8个十六进制字符后跟一个下划线)


Regular expression help in PHP (8 hexadecimal characters followed by an underscore)

我想验证我的输入是否包含以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)

我的正则表达式有什么问题?

你只是缺少一个.

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

对于_*,您要匹配0个或多个下划线。*是重复前一个字符或组0或以上的量词。因此,它也匹配末尾没有下划线的字符串(重复0次_)

.是一个正则表达式特殊字符,匹配任何字符(默认情况下换行符除外)

尝试删除*:

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

将下划线后的*替换为。*

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