<?php
$string = 'user34567';
if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
echo 1;
}
?>
我想检查字符串中是否有单词user后跟最多8个数字的内容。
<?php
$string = 'user34567';
if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
echo 1;
}
?>
实际上,你非常接近了:
if(preg_match('/^user[0-9]{1,8}$/', $string)){
“必须在字符串开头匹配”的锚点应该放在最前面,后跟着"user"文本;然后你指定字符集[0-9]
和乘数{1,8}
。最后,以“必须在字符串结尾匹配”的锚点结束。
关于你原来的表达式,有几点需要注意:
^
匹配字符串开头,因此将其写在表达式中的任何其他位置而不是开头将无法产生预期结果+
是乘法器;{1,8}
也是,但一个表达式只能使用一个乘法器顺便说一句,[0-9]
可以替换为\d
。这是一个自动字符组,可以缩短正则表达式,尽管这个特定的字符组并没有节省太多字符 ;-)
^
和 $
,你只匹配模式是行上唯一的内容。这是你想要的吗?如果是,请使用以下内容:preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );
preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );
像往常一样,你应该使用类似RegexPal这样的参考工具,在隔离环境中进行正则表达式测试。
/^user[0-9]{1,8}$/
。请尝试使用以下正则表达式:
/^user([0-9]{1,8})$/
/^user\d{1,8}$/