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

时间:2013-03-05 10:26:29

标签: php regex preg-match

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

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

3 个答案:

答案 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);