【问题标题】:Validating a username with preg_match according to various criteria根据各种标准使用 preg_match 验证用户名
【发布时间】:2012-12-29 22:39:37
【问题描述】:

所以我继续我的 php 之旅。现在创建注册表并验证用户请求的用户名。这是我到目前为止所拥有的:

if (preg_match("([a-z 0-9](?=.{3})(?!.{10}))", $user_Name))

我使用“RegExr”来创建这个匹配,但是它似乎不起作用。加了个大写字母还是说有效

打算:

  • 从 0 到 9 的数字
  • 没有大写字母
  • 完全没有特殊符号
  • 最少 6 个字符
  • 最多 10 个字符

【问题讨论】:

  • 强制用户的用户名长度在 6 到 10 个字符之间是很糟糕的。这种长度限制有什么真正的原因吗?
  • 我选择使用 10 的最大长度,因为我想创建更干净更专业的用户名...你建议我改变这个吗?
  • 很多用户使用他们的名字+姓氏作为用户名(就像我一样),对于像我这样的人来说,这很糟糕。将用户名限制为 10 个符号是什么“专业”?
  • 好吧,我把它改了,谢谢提醒

标签: php regex preg-match


【解决方案1】:

根据您的规则,这应该可以:

if (preg_match('/^[a-z0-9]{6,10}$/', $user_name))

【讨论】:

  • 谢谢尼克这对我帮助很大
  • 没问题,如果有帮助可以标记为正确答案。
【解决方案2】:

经过大约 3 小时的研究和故障排除后,我找到了正确的解决方案。原来顺序很重要:

(?=.{5})

(?!.{11})

^[a-z 0 -9]+$

if (!preg_match('/(?=.{5})(?!.{11})^[a-z 0 -9]+$/', $user_Name)) {
            echo 'username is not valid</br>';
            echo $user_Name;
        }
        else {
            echo 'username is valid</br>';
            echo $user_Name;
        }

【讨论】:

  • 我已经回答了你的问题。你现在所做的完全是错误的。 (?=.{5})表示您可以有 5 个之前的任何字符,因此 ##### 是一个有效的用户名。 [a-z 0 -9] 应该是 [a-z0-9] 否则允许使用空格。我什至认为这意味着 a-z、空格、连字符和 9。
  • @NicholasRuunu 是对的,使用他的模式。您的模式不正确,如果您公开测试它,您会发现这一点。
  • 我现在正在测试它,出于某种奇怪的原因它可以工作:/... 叹息我好困惑
猜你喜欢
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多