如何制作一个验证用户名的regex?

问题描述 投票:0回答:1

我写了这样的regex

/(?=.*[a-z])(?!.*[A-Z])([\w\_\-\.].{3,10})/g

检查以下条件

>has minimum of 3 and maximum of 10 characters.
>must contain atleast a lowercase alphabet.
>must contain only lowercase alphabets, '_', '-', '.' and digits.

这个方法可行,但即使有超过10个字符也会返回true。

我想用一个新的或修改过的正则表达式来检查上面给出的条件。

regex validation username
1个回答
1
投票
  1. 添加anchors
  2. 去掉最后一个点
  3. 如果你使用了正确的字符类,那么负数前置是没有用的。

这个regex可以工作。

 ^(?=.*[a-z])[a-z0-9_.-]{3,10}$

演示& 解释


1
投票

您可以使用此REGEX

REGEX演示

([a-z]{1}[0-9a-z_.-]{2,9})

, 尝试过文本

username77
usr
username10
user_test
usr.1000

-1
投票

办法有很多。我相信共同的特点是他们都会有一个积极的展望。下面是另一种。

^(?=.{3,10}$)[a-z\d_.-]*[a-z][a-z\d_.-]*$

演示

请注意 [a-z\d_.-]* 出现两次。有些regex引擎支持子程序(或子表达式),允许人们将regex的重复部分保存到一个编号或命名的捕获组中,以便以后在字符串中重复使用。例如,当使用PCRE引擎时,您可以写下以下内容

^(?=.{3,10}$)([a-z\d_.-]*)[a-z](?1)$

演示

(?1) 被保存到捕获组1的匹配字符串的regex标记所取代 ([a-z\d_.-]*),与之形成对比的是 \1,它引用了捕获组1的内容。 使用子程序可以缩短regex的表达式,但更重要的是它减少了对regex的标记进行重复修改时出错的机会。

© www.soinside.com 2019 - 2024. All rights reserved.