用php实现正则表达式

用php实现正则表达式,php,regex,Php,Regex,我正在尝试检查用户是否键入了至少两个字母的姓名。所以基本上,他不能这样输入他的名字。。它必须有两个字母 我编写的正则表达式不起作用。为什么?试试这个(修改代码): $pattern="/[a-z]*[a-z]*/i"; if(!preg_match($pattern, $value)){ $this->error_name="The name should contain at least two letters."; } 您可以使用: $patter

我正在尝试检查用户是否键入了至少两个字母的姓名。所以基本上,他不能这样输入他的名字。。它必须有两个字母

我编写的正则表达式不起作用。为什么?

试试这个(修改代码):

 $pattern="/[a-z]*[a-z]*/i";
if(!preg_match($pattern, $value)){
         $this->error_name="The name should contain at least two letters."; 
       }
您可以使用:

$pattern="/^[a-z]{2}.*/i";
if(!preg_match($pattern, $value)){
         $this->error_name="The name should contain at least two letters."; 
       }
这将确保名称只有字母,并且名称中至少有2个字母

编辑:

看起来您希望名称至少包含两个字母,也可以包含其他非字母:

$pattern="/^[a-z]{2,}$/i";
您的代码不起作用,因为
*
表示零次或多次,因此它也将不匹配任何字符或一个字符

$pattern="/[a-z].*[a-z]/i";
if(!preg_match($pattern, $value)){
   $this->error_name="The name should contain at least two letters."; 
}
我想答案应该是上面的答案。。你的回答给了我一个线索

现在,它也将匹配这些名称:


当字符串中至少使用了两个字母时,A1111A

返回true:

$pattern="/^([a-z]{2})|([a-z].*[0-9].*[a-z].*).*/i";

因为
*
表示“零或更多”
111111
没有字母,因此匹配<如果只想测试字符串是否包含两个字母,则不需要代码>*。它的工作原理如下:aa1111。。但是如果用户名是A1111111A怎么办。。通过在中间添加
*
也可以验证它的有效性。但它也可以包含
alpha
以外的字符。但我认为这意味着,至少有两个字母以另一个字母开头。。。此用户名也是有效的a111111111b
$pattern="/^([a-z]{2})|([a-z].*[0-9].*[a-z].*).*/i";
preg_match_all('/[a-z]/', $str, $m) >= 2;