【问题标题】:PHP regex accepts only letters and numbers and only one dotPHP 正则表达式只接受字母和数字,并且只接受一个点
【发布时间】:2017-12-02 17:38:51
【问题描述】:

我对正则表达式了解不多,我正在尝试创建一个用户名字符串,它只接受英文字母和数字,并且只接受一个点。

我有这个正则表达式代码:

if(preg_match('/[^A-Za-z0-9]/', $username)){
    $error = "Invalid Username";
}

此代码允许我只有英文字母和数字,我想在此代码中添加点,并且只接受一个点。

【问题讨论】:

  • 点是可选的吗?你能有零点吗?
  • @KodosJohnson 是的,它是可选的
  • 我想我会用if(!preg_match('/^[a-z\d]*\.?[a-z\d]*$/i', $username)) {...}

标签: php regex


【解决方案1】:

只有一个点,但在字符串的任何地方?我会再做一次检查:

if(preg_match('/[^A-Za-z0-9\.]/', $username) || substr_count($username, '.') > 1){
    $error = "Invalid Username";
}

【讨论】:

    【解决方案2】:

    您需要应用前瞻断言来确认它:

    if (preg_match('/^(?!(?>[^.]*\.){2})[A-Za-z0-9\.]+$/', $username)) {
        // username accepted
    }
    

    【讨论】:

      【解决方案3】:

      preg_match 方法:

      $error = '';
      if (!preg_match('/^(\.[a-z0-9]+|[a-z0-9]+\.([a-z0-9]*))$/i', $username)) {
          $error = "Invalid Username";
      }
      
      if ($error) echo $error;
      

      【讨论】:

        【解决方案4】:

        你可以使用

        if (!preg_match('~^[A-Z0-9]*(?:\.[A-Z0-9]*)?$~i', $username))
        {
             $error = "Invalid Username";
        }
        

        请参阅 PHP demoregex demo[A-Z0-9] 可以替换为 [[:alnum:]] 以匹配字母或数字。

        详情

        • ^ - 字符串开头
        • [A-Z0-9]* - 0 个或多个字母或数字
        • (?: - 可选非捕获组的开始
          • \. - 一个点
          • [A-Z0-9]* - 0 个或多个字母或数字
        • )? - 可选组的结尾
        • $ - 字符串结束。

        【讨论】:

        • @RomanPerekhrest ~^[A-Z0-9]*(?:\.[A-Z0-9]*)?$~i 很好地处理了这种情况。
        • 这个^[A-Z0-9]*(?:\.[A-Z0-9]*)?$ 也将匹配一个没有英文字母和数字.
        • @RomanPerekhrest 根据当前的 OP 要求有效:只有字母或数字或 1 个点。
        • 引用问题:“用户名字符串只接受英文字母数字只有一个点”。无论如何,看起来像是接受了错误的答案,或者他制定的条件不正确
        • @RomanPerekhrest 不,OP's comment 表示点是可选的,并且 OP 正则表达式中的否定字符类意味着字符串甚至可以为空。无论如何,我仍然相信 OP 在 '~^[A-Z0-9]+(?:\.[A-Z0-9]+)?$~i' 之后
        【解决方案5】:

        只需在可选点周围重复图案,就可以很容易地处理这种情况。

        `^[A-Za-z0-9]*\.?[A-Za-z0-9]*$`
        

        用 php 封装

        if (!preg_match('`^[A-Za-z0-9]*\.?[A-Za-z0-9]*$`', $username)) {
            $error = "Invalid username";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-27
          • 2011-11-14
          • 1970-01-01
          • 2019-08-28
          • 2010-12-19
          • 2018-05-28
          • 2011-08-24
          • 1970-01-01
          相关资源
          最近更新 更多