用于验证用户名的正则表达式

2022-08-30 07:38:24

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

  1. 仅包含字母数字字符、下划线
  2. 下划线和点不能位于用户名的末尾开头(例如 / / / )。_usernameusername_.usernameusername.
  3. 下划线和点不能彼此相邻(例如 )。user_.name
  4. 下划线或点不能连续多次使用(例如 / )。user__nameuser..name
  5. 字符数必须介于 8 到 20 之间。

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

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

答案 1
^(?=.{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})[^_.].*[^_.]$

答案 2

我想你必须在这里使用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 (

_(?!\.)a _ 后不跟 .或

\.(?!_)一个。后不跟 _ OR

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

{6,18}最少6次至最多18次

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

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


推荐