繁体   English   中英

在javascript中使用正则表达式验证用户名

[英]validate username with regex in javascript

我是正则表达式的新手,想创建一个正则表达式来检查用户名。 这些是条件:

  1. 用户名必须在 4 到 20 个字符之间
  2. 用户名只能包含字母 az、数字 0-9 和特殊字符 -._
  3. 特殊字符 -._ 不得连续使用,以免混淆
  4. 用户名不能包含空格

例子

  • any.user.13 => 有效
  • any..user13 => 无效(连续两个点)
  • 任何用户=> 有效
  • 任何=> 无效(太短)
  • anyuserthathasasupersuperlonglongname => 无效(字符太多)
  • 任何用户名=> 由于空格而无效

我试图创建自己的正则表达式,但只到了指定允许字符的地步:

[a-z0-9.-_]{4,20}

不幸的是,如果中间有空格,它仍然匹配字符串,并且可能有两个特殊字符 .-_ 连续:

尽管空格和两个点连续匹配

如果有人能够在这个问题上为我提供帮助,我将不胜感激。 请记住,我是正则表达式的新手并且仍在学习它。 因此,对您的正则表达式的解释会很棒。

提前致谢 :)

有时,编写正则表达式几乎与查找用户名一样具有挑战性。 但是在这里你已经很接近让它工作了。 我可以指出您的尝试失败的三个原因。

首先,我们需要匹配所有输入字符串,而不仅仅是其中的一部分,因为我们不想忽略输入中出现的空格和其他字符之类的东西。 为此,通常会分别使用锚点^ (匹配开始)和$ (匹配结束)。

还有一点是我们需要防止两个特殊字符出现在彼此的旁边。 这最好通过负前瞻来完成。

最后,我可以看到您用来测试正则表达式的工具正在添加标志gmi ,这不是我们想要的。 特别是, i标志表示正则表达式应该不区分大小写,因此它应该像小写字母一样匹配大写字母。 去掉那个标志。

最终的正则表达式如下所示:

/^([a-z0-9]|[-._](?![-._])){4,20}$/

这里没有什么真正神秘的,除了组[-._](?![-._])这意味着任何-._后面没有任何-._

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM