【问题标题】:preg_match PHP validating usernamepreg_match PHP 验证用户名
【发布时间】:2011-12-21 15:58:04
【问题描述】:

如何使用 php 验证用户名

我的规则是:

用户名只能包含字母、数字和 1 个下划线。

这是我目前的预赛

preg_match('/^[a-zA-Z0-9][_]{1}[a-zA-Z0-9]+$/',$_POST['uname'])

【问题讨论】:

  • 在您之前的至少两个问题中,您说“谢谢”,但没有接受答案。回顾您的其他问题,如果某个答案对您有所帮助,请点击该答案旁边的大复选标记。

标签: php regex validation preg-match


【解决方案1】:

应该这样做:

/^[a-zA-Z0-9]*_?[a-zA-Z0-9]*$/

请记住,单个项目的字符类是多余的。只写原子。而{1} 是另一个严重冗余的量词。

/[_]{1}/

一样
/_/

编辑:

基于新的约束和 chris 的有用评论,这似乎是一个更好的正则表达式:

/^[a-zA-Z0-9]+_?[a-zA-Z0-9]+$/D

它匹配至少两个字符的用户名,不以可选的下划线结尾或开头,并且末尾没有换行符。

【讨论】:

  • 谢谢 :D 但我还有一个问题,我还需要 _ 不应该是用户名的第一个和最后一个 myusername - 不允许 myusername - 不允许
  • @user1033600 允许的最小字符数是多少?
  • 使用D 标志,除非您喜欢将换行符作为最后一个字符的用户名/^[a-zA-Z0-9]*_?[a-zA-Z0-9]*$/D
  • 对不起@chris 我不知道这个标志。我更新了答案——感谢您指出!
  • +1。 ^[a-zA-Z0-9]+_?[a-zA-Z0-9]+$ 确实有效。但是,更有效的编写方式是:^[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)?$ 当给定较长的无效字符串(例如:"1234567890123456789012345678901234567890123456789#")时,这在声明不匹配时更有效。
猜你喜欢
  • 2018-07-14
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多