在组内匹配量化

时间:2012-02-20 21:03:41

标签: javascript regex

我正在尝试使用正则表达式js用户名检查器进行注册,但是我遇到了一些问题

这是我写的表达

^[a-zA-Z]{1}([a-zA-Z0-9]*[\._ ]?){2,10}[A-za-z\d]$

问题是它不限制句号,下划线和空格,用户名也应该在4-12个字符之间。

我试图允许: 第一个角色必须从A-Z a-z开始 最后一个字符必须是字母数字 中间的所有内容必须是2-10个字母数字字符,并且只允许1个空格,句点和下划线。

例如:

  • A ___ N无效(3个不合理)
  • A_NON有效
  • " A.Non"无效,空间最后。
  • A.non有效
  • N.oN有效

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

最好的方法是使用前瞻断言来组合两个不相关的要求。基本上,您需要确保此正则表达式 匹配:

^[a-zA-Z][a-zA-Z0-9._ ]{2,10}[a-zA-Z0-9]$

并且这个匹配:

([._ ]).*\1

您可以使用否定先行断言

组合它们
^(?!.*([._ ]).*\1)[a-zA-Z][a-zA-Z0-9._ ]{2,10}[a-zA-Z0-9]$

答案 1 :(得分:1)

试试这个。

^(?=.{4,12}$)[A-Za-z][A-Za-z0-9]{0,10}[._ ][A-Za-z0-9]{1,10}$

插入符号后的parentesized表达式检查长度(假设您的正则表达式方言提供了前瞻性断言)或单独检查代码中的字符串长度。

修改:允许号码作为最后一个字符。请注意,这需要在某处使用空格,点或下划线;如果你选择它,请相应地调整数字。