14

我正在尝试使用正则表达式验证 PHP 中的用户名,而我提交的所有内容都未通过检查。我对此还是很陌生。

if ( !preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5-31}$/', $joinUser) )

规则:

  • 必须以字母开头
  • 6-32 个字符
  • 只限字母和数字

我一直在使用这个在线测试仪这个。我读了这个线程这个线程,但不能理解太多,因为它们似乎比我的复杂一点(前瞻?和各种特殊字符)。

在阅读了我链接到的第一个线程之后,似乎我是一个不太明白说“字母”如何影响被认为是可接受的内容的人,即外国字符、重音字符等。我真的只看英文字母(这是 ASCII 吗?)和数字 0-9。

谢谢。

4

4 回答 4

34

唯一的问题是,你拼错了最后一个量词。

{5-31}必须{5,31}

所以你的正则表达式是

if ( !preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $joinUser) )

你可以跳过{1},但它不会受到伤害。

于 2012-11-15T07:05:24.703 回答
4

显然,您需要更改的只是 5-31 中的 5,31。

工作示例:

if (preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5,31}$/', "moo123"))
{
    echo 'succeeded';
}
else
{
    echo 'failed';
}
于 2012-11-15T07:19:43.367 回答
2

试试这个:

if ( !preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $joinUser) )
于 2012-11-15T07:06:14.720 回答
0

另一个答案:

if (strlen($username) >= 5 && strlen($username) <= 31 && 
ctype_alnum($username)){

     echo "valid username";
                
}else{

     echo "invalid username";

}
于 2022-02-27T14:49:43.423 回答