2011-07-25 37 views
1

我试图创建一个正则表达式模式,允许用户使用以下规范创建一个用户名。 (对于该初始图案的目的,我只使用标准的美国英语字母表。Javascript正则表达式模式

第一个字符必须是字母字母(大写或小写)。[A-ZA-Z] 的最后一个字符必须是一个字母数字(大写或小写)[A-ZA-Z0-9] 之间必须是字母或数字与一个规则的任何字符:(。)

用户可以使用一个周期,破折号( - ),或下划线(_),但它必须跟一个字母数字字符。因此,一次不重复一个或多个这些字符。

我试过以下正则表达式模式,但没有得到结果我wa的希望。感谢您花时间帮助我解决这个问题。

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

编辑

它实际上可能是工作我预期的方式。但我总是得到两场比赛回到我身边。第一个是整个有效的字符串,第二个是第一个字符串的缩写版本,通常会切断第一个字符。的有效输入

实例:

  • Spidy
  • Spidy.Man
  • AMA-ZA-zing_Spidy的无效输入

实例:

  • Extreme_ _ _Spi DY(重复下划线)
  • 的_-_ Spidy(重复特殊字符)
  • _ _ SPIDY _ _(开始和有特殊字符结尾)

回答

5

听起来像这样的模式:

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

谢谢,这是我自己的更好的代表。任何想法为什么我的text.match(模式)返回多个匹配? – Spidy

+1

圆括号加倍捕获组,所以你也看到了捕获的值。你可以放弃所有这些,因为你需要知道的只是字符串是否匹配。 –

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