5
<?php

    $string = 'user34567';

            if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
                echo 1;
            }

?>

我想检查字符串是否有单词user后跟数字,最多可以是 8 个符号。

4

5 回答 5

10

你实际上非常接近:

if(preg_match('/^user[0-9]{1,8}$/', $string)){

“必须在字符串开头匹配”的锚点应该一直在前面,然后是“用户”文字;然后你指定字符集[0-9]和乘数{1,8}。最后,您以“必须在字符串末尾匹配”锚点结束。

对您的原始表达的一些评论:

  1. 匹配字符串的^开头,因此将其写入此表达式中的任何其他位置,但开头不会产生预期的结果
  2. +乘数;{1,8}也是一个,但表达式后只能使用一个乘数
  3. 除非您打算使用在表达式中找到的数字,否则不需要括号。

顺便说一句,[0-9]你也可以使用\d. 这是一个缩短正则表达式的自动字符组,尽管这个特定的字符组并没有保存太多字符;-)

于 2012-06-12T15:23:47.183 回答
3

通过使用^and $,你只在模式是唯一的东西时匹配。那是你要的吗?如果是这样,请使用以下内容:

preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );

如果您想在一行中的任何位置找到此模式,我会尝试:

preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );

与往常一样,您应该使用 RegexPal 之类的参考工具单独进行正则表达式测试。

于 2012-06-12T15:28:44.417 回答
2

你很接近,这是你的正则表达式:/^user[0-9]{1,8}$/

于 2012-06-12T15:23:53.903 回答
1

请尝试以下正则表达式:

/^user([0-9]{1,8})$/

于 2012-06-12T15:23:57.697 回答
1

使用这个正则表达式:

/^user\d{1,8}$/
于 2012-06-12T15:23:58.337 回答