【问题标题】:Using PHP regex to validate username使用 PHP 正则表达式验证用户名
【发布时间】:2022-02-28 04:02:54
【问题描述】:

我正在尝试使用正则表达式在 PHP 中验证用户名,但我提交的所有内容均未通过检查。在这方面我还是超级新手。

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

规则:

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

我一直在使用 this online testerthis one too。我阅读了this threadthis thread,但无法理解太多,因为它们似乎比我的要复杂一些(前瞻?和各种特殊字符)。

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

谢谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

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

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

    所以你的正则表达式是

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

    你可以跳过{1},但不会有什么坏处。

    【讨论】:

      【解决方案2】:

      显然,您只需从 5-31 更改为 5,31。

      工作示例:

      if (preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5,31}$/', "moo123"))
      {
          echo 'succeeded';
      }
      else
      {
          echo 'failed';
      }
      

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

        • “试试这个”的答案在 Stackoverflow 上的价值很低,因为它们对教育/授权成千上万的未来研究人员几乎没有作用。
        【解决方案4】:

        另一个答案:

        if (strlen($username) >= 5 && strlen($username) <= 31 && 
        ctype_alnum($username)){
        
             echo "valid username";
                        
        }else{
        
             echo "invalid username";
        
        }
        

        【讨论】:

          猜你喜欢
          • 2017-10-04
          • 2021-09-06
          • 2012-08-14
          • 1970-01-01
          • 1970-01-01
          • 2021-11-28
          相关资源
          最近更新 更多