验证用户名的正则表达式

新手上路,请多包涵

我正在尝试创建一个正则表达式来根据这些条件验证用户名:

  1. 仅包含 字母数字 字符、 下划线 和 _点_。
  2. Underscore and dot can’t be at the end or start of a username (eg _username / username_ / .username / username. ).
  3. 下划线和点不能 _相邻_(例如 user_.name )。
  4. 下划线或点不能 连续 多次使用(例如 user__name / user..name )。
  5. 字符数必须介于 8 到 20 之间。

这就是我到目前为止所做的;听起来它强制执行所有标准规则 _,但第 5 条规则_。我不知道如何将第 5 条规则添加到此:

  ^[a-zA-Z0-9]+([._]?[a-zA-Z0-9]+)*$

原文由 mohsen dorparasti 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 776
2 个回答
^(?=.{8,20}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$
 └─────┬────┘└───┬──┘└─────┬─────┘└─────┬─────┘ └───┬───┘
       │         │         │            │           no _ or . at the end
       │         │         │            │
       │         │         │            allowed characters
       │         │         │
       │         │         no __ or _. or ._ or .. inside
       │         │
       │         no _ or . at the beginning
       │
       username is 8-20 characters long


如果您的浏览器由于缺乏负面的后视支持而引发错误,请使用以下替代模式:

 ^(?=[a-zA-Z0-9._]{8,20}$)(?!.*[_.]{2})[^_.].*[^_.]$

原文由 Ωmega 发布,翻译遵循 CC BY-SA 4.0 许可协议

我猜你必须在这里使用 Lookahead 表达式。 http://www.regular-expressions.info/lookaround.html

尝试

^[a-zA-Z0-9](_(?!(\.|_))|\.(?!(_|\.))|[a-zA-Z0-9]){6,18}[a-zA-Z0-9]$

[a-zA-Z0-9] 一个字母数字 THEN (

_(?!\.) _ 后面没有 .要么

\.(?!_) 一个。后面没有 _ OR

[a-zA-Z0-9] 一个字母数字) FOR

{6,18} 最小 6 到最大 18 次 THEN

[a-zA-Z0-9] 一个字母数字

(第一个字符是字母数字,然后是 6 到 18 个字符,最后一个字符是字母数字,6+2=8、18+2=20)

原文由 PhilMasteG 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题