PHP正则表达式允许特定的用户名

Far*_*sas 0 php regex

这是我的第一个问题.目前我正在开发一个PHP论坛脚本,我想让人们注册一个遵守我的规则的用户名.

规则很简单:

  • 第一个字必须是一个字母
  • 他们也可以使用数字但不是第一个
  • 他们可以使用fullstop/underscore一次但不能在用户名末尾使用

请放下一个功能来帮助我.我读了一些教程,但不太了解正则表达式.因此我被困住了.提前感谢您的回答.

20分钟后添加:

谢谢你的回答,我还有一件事要问,我可以解除愚蠢的用户名吗?EG aaa123,ab-cd,uuuu ......比怎么样?

out*_*tis 5

拿你描述的部分:

  • 第一个字必须是一个字母

开始 ^[A-Za-z]

  • 他们也可以使用数字但不是第一个

[A-Za-z0-9]* 在中间

  • 他们可以使用fullstop/underscore一次但不能在用户名末尾使用

(可选)使用下划线,后跟至少一个其他有效字符 ([._][A-Za-z]+)?

把它们放在一起就可以了:/^[A-Za-z][A-Za-z0-9]*([._][A-Za-z0-9]+)?$/.使用情况'/ I不敏感的标志让你放下"A-Z": /^[a-z][a-z0-9]*([._][a-z0-9]+)?$/i.

正则表达式等同于确定性有限自动机(DFA).研究它们有助于掌握正则表达式.特别是,州之间的过渡直接适用于您的三点.这种语言的(简化)状态图应该很容易理解: /^ [az]的状态图[az0-9]*([._] [az0-9]??

DFA:

  • 从状态0开始
  • 如果遇到字母,则转换到状态1,
  • 只要遇到字母和数字,就会保持在状态1,
  • 如果遇到句点或下划线,则切换到状态2,
  • 如果遇到字母和数字,则切换到状态3,
  • 只要遇到字母和数字,就会保持在状态3,
  • 如果字符串以状态1或3结束,则接受该字符串

我称之为"减少",因为有第五个不接受的状态和通向它的边缘未显示.基本上,如果遇到的字符不是列出的字符,则DFA会转换到第五个不接受状态并保持不变.