【问题标题】:Username may contain lowercase characters and numbers用户名可以包含小写字符和数字
【发布时间】:2021-07-29 15:01:21
【问题描述】:

我想在用户名字段中允许小写字符和数字。

但有以下条件...

  • 只能使用数字作为用户名不允许(例如,只能使用手机号码)
  • 只允许小写字符允许(例如,用户名中没有任何数字)
  • 允许小写字符+数字(例如小写和数字的组合)
  • 至少需要 8 个字符
  • 允许的最大长度 20 个字符

什么 php 正则表达式会做到这一点?

我试过跟随,但它强制小写+数字。只有小写的用户名不允许。

$username_pattern = '/^(?=.*[a-z])(?=.*[a-z])(?=.*\d)[a-z0-9]{8,20}$/';

我只想要用户名中的小写和/或小写+数字(最小 8 和最大 20)

帮助表示赞赏。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您可以将其简化为只允许数字

    ^(?!\d*$)[a-z0-9]{8,20}$
    

    说明

    • ^ 字符串开始
    • (?!\d*$) 负前瞻,不仅断言数字直到字符串结束
    • [a-z0-9]{8,20} 匹配 8-20 次字符 a-z 或数字 0-9
    • $字符串结束

    Regex demo | Php demo

    $username_pattern = '/^(?!\d*$)[a-z0-9]{8,20}$/';
    $userNames = [
        "1a3b5678",
        "1a3b5678abcd",
        "12345678",
        "1a3b5678abcddddddddddddddddddddddddddddddd",
        "1a3B5678",
        "a1"
    ];
    
    foreach ($userNames as $userName) {
        if (preg_match($username_pattern, $userName)) {
            echo "Match - $userName" . PHP_EOL;
        } else {
            echo "No match - $userName" . PHP_EOL;
        }
    }
    

    输出

    Match - 1a3b5678
    Match - 1a3b5678abcd
    No match - 12345678
    No match - 1a3b5678abcddddddddddddddddddddddddddddddd
    No match - 1a3B5678
    No match - a1
    

    【讨论】:

    • 我试过...但它允许大写字符...我只想要小写和/或小写+数字
    • @VMJCreations 它不允许使用大写字符。见regex101.com/r/ZCTxJ7/1
    • 我们如何检查空格和拒绝空格?
    • @VMJCreations 此模式[a-z0-9]{8,20}$ 不允许使用空格,只能使用 a-z 范围内的字符和 0-9 范围内的数字
    猜你喜欢
    • 1970-01-01
    • 2016-04-28
    • 2019-01-12
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多