0

您好,我有一个正则表达式,它几乎可以接受每个字符,包括特殊字符。我已将其设置为接受最少 8 个和最多 30 个字符。一切都适合最低限度,但它不能最大限度地发挥作用。

如果字符串大于 30 或任何长度。结果是真的。

模式在这里:

 $pattern = '/[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']{8,30}/';

整个测试代码为:

 $pattern = '/^[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']{8,30}$/';

 if(preg_match($pattern, $pass))
   {
     echo '<br>true';
   }
 else
   {
 echo '<br>false';
    }


?>
4

2 回答 2

3

这将匹配字符串中最多 30 个字符的任何字符串。您需要包括字符串的开头和结尾:

$pattern = '/^[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']{8,30}$/';
于 2013-03-27T18:36:45.737 回答
0

您问题中的第一个$pattern表达式缺少必需的:^以及行首$ 和行尾断言- (但下面的示例代码片段正确使用了它们。)

您还需要转义字符类中的破折号/连字符 - 连字符定义了一系列字符。(请注意,正斜杠/不是转义字符!)试试这个:

$pattern = '/^[A-Za-z0-9.%^&()$#@!\-+\/]{8,30}$/';
于 2013-03-27T20:02:08.420 回答