2016-06-14 150 views
2

我期待在javascript中使用正则表达式进行名称检查。[字母数字]的正则表达式建议[字母数字.- _ @] 31个字符

  1. 的值可以包含字母数字和下列特殊字符 ( ' - ', '_' 和 '@' '')。
  2. 它应该始终以字母数字字符开头。
  3. 它不应该是一个空字符串。
  4. 此参数的最大允许长度为31个字符。
  5. 该参数不区分大小写。

我想出了这个,但觉得不正确。有关如何让它万无一失的任何建议?

^[A-Za-z0-9]+[[email protected]]{30} 
+0

您应该进一步将'-'移动到'[A-Za-z0-9 _ @ .-]'的末尾,并且不要使用固定重复的'30',而是使用0-30'{0,30}' –

+0

你可以将'[A-Za-z0-9 _ @ .-]'改成'[\ w @ .-]' –

+0

@SebastianProske - Ohr right。如果我放一个{30}它只会查找长度= 30的权利?我需要它匹配30以下的任何东西。所以..这样的事情?^[A-Za-z0-9] [A-Za-z0-9 _ @ .-] {0,30}我们正在移动 - 到最后,因为它不应该像A-Z表示那样拾取一系列字符? – blueren

回答

4

你是非常接近,这里是正确的正则表达式:

/^[a-z0-9][\[email protected]]{0,30}$/i 

我施加的folloing变化:

  • 添加$锚固到端
  • 使用的i改性剂不区分大小写
  • \w替换a-zA-Z0-9_并移动-到端字符分类
  • 更改固定重复{30}{0,30}

请参阅Regex101-Demo进行一些单元测试。

1
^[A-Za-z0-9][[email protected]]{0,30} 
  • 地方-在与托架的,所以它不会被用作范围
  • 允许1-31字符{,30}
  • 除去+第一字符之后(没有它你会得到> 31个字符)
1

您可以随时在www.regexr.com

  • 检查你的模式你需要躲避“ - ”与和反斜线:\-
  • 您需要删除+中间部分
  • 变化{30}{0,30},因为它并不需要准确地31个字符长
  • 添加\我到底为不区分大小写,删除A-Z零件
  • 关闭图案$

结果是这样的:

/[a-z0-9][[email protected]\-._]{0,30}/i 
相关问题