2012-06-12 30 views
5
<?php 

    $string = 'user34567'; 

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

?> 

我要检查字符串是否有字用户遵循数字,可以是8个符号最大值。正则表达式

回答

10

你实际上是非常接近:

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

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

您的原始表达几点意见:

  1. ^字符串的开头匹配,所以写其他地方有这样的表达里,但一开始不会产生预期的结果
  2. +是乘数; {1,8}也是一个,但在表达式后只能使用一个乘数
  3. 除非您打算使用在表达式中找到的数字,否则不需要括号。

顺便说一句,而不是[0-9]你也可以使用\d。它是缩短了正则表达式的自动字符组,虽然这尤其是一个不保存所有的字符太多;-)

2

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

1

试试下面的正则表达式来代替:

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

1

使用这个表达式:

/^user\d{1,8}$/ 
3

利用^$,只有当模式是唯一的行时才匹配。那是你要的吗?如果是这样,使用以下命令:

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

如果你想在一条线上的任何地方找到这种模式,我会尝试:

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

与往常一样,你应该使用一个参考工具,如RegexPal做你的正则表达式测试是孤立的。