我想验证我的输入是否包含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)
我的正则表达式出了什么问题?
答案 0 :(得分:7)
您错过了.
preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);
使用_*
,您可以匹配0或更多下划线。 *
是一个量词,它重复前面的字符或组0次或更多次。因此,它也匹配最后没有下划线的字符串(_重复0次)
.
是一个正则表达式特殊字符,匹配任何字符(默认情况下除了换行符)
答案 1 :(得分:2)
尝试删除*:
preg_match('/^[0-9A-Fa-f]{8}_/', $value);
答案 2 :(得分:1)
在下划线
后用*替换*preg_match('/^[0-9A-Fa-f]{8}_.*/', $value);