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