用于包含字母,数字和一个连字符的用户名的Javascript正则表达式

时间:2015-08-07 07:29:05

标签: javascript php regex

我将通过JavaScript和PHP检查用户名。

用户名可以包含英文字母,数字和一个连字符( - )。

无法使用连字符( - )启动用户名。

用户名无法用连字符( - )完成。

无法使用数字启动用户名。

用户名不能包含多个连字符( - )。

用户名不能小于6且大于20。

abc123 is correct.
abc-123 is correct.
ab12 is wrong: username is shorter than 6 character.
-abc123 is wrong: username is started with hyphen.
abc123- is wrong: username is finished with hyphen.
ab-12-c3 is wrong: username contains more than one hyphen.
123abc is wrong: username is started with numbers.

2 个答案:

答案 0 :(得分:4)

您可以使用

^(?!\d)(?!.*-.*-)(?!.*-$)(?!-)[a-zA-Z0-9-]{6,20}$

请参阅demo

说明:

  • ^ - 开头匹配
  • (?!\d) - 如果字符串以数字
  • 开头,则不匹配
  • (?!.*-.*-) - 如果字符串在字符串
  • 中有2个连字符,则不匹配
  • (?!.*-$) - 如果字符串以连字符
  • 结尾,则不匹配
  • (?!-) - 如果字符串以连字符
  • 开头,则不匹配
  • [a-zA-Z0-9-]{6,20} - 匹配指定范围内的6到20个字符
  • $ - 断言字符串的结尾。

答案 1 :(得分:2)

您需要使用基于前瞻性的正则表达式:

{
    "name" : "James"
    "number" : 1,
    "now" : 1438933526108
}

使用JavaScript的逻辑方法是:

/^(?=.{6,20}$)[a-z][a-z0-9]+(?:-[a-z0-9]+)?$/i