特殊的正​​则表达式

时间:2014-07-28 06:21:19

标签: regex

我希望限制一个字符串,它可以接受字母数字值和hiphen   我提供了3个例子,以便有一个明确的想法   1)AS15JKM-125TR-325AMOR
  2)ITEW32-DE432OI
  3)09IURE765EDR

没有特定的模式,字符串中可能有0到3个hiphens。   我只是想以这样的方式限制它,它应该只接受字母数字值和   只有Hiphen,没有其他特殊性格。   请帮助我。

2 个答案:

答案 0 :(得分:6)

选项1:无前瞻

^(?:[A-Za-z0-9]*-){0,3}[A-Za-z0-9]+$

请注意,如果您只想要大写字母,则需要删除a-z

<强>解释

  • ^锚点断言我们位于字符串的开头
  • 非捕获组(?:[A-Za-z0-9]*-)匹配零个或多个字母或数字,然后匹配连字符
  • 重复此操作零至三次,强制执行连字符限制
  • [A-Za-z0-9]+匹配一个或多个字母或数字
  • $锚点断言我们位于字符串的末尾

选项2:使用Lookahead

这并没有比第一个版本带来任何好处,我只是将其展示完成。

^(?=(?:[^-]*-){0,3}[^-]*$)[A-Za-z0-9]+$

<强>解释

前瞻(?=(?:[^-]*-){0,3}[^-]*$)断言接下来是

  • (?:[^-]*-)任意数量的非连字符,后跟连字符
  • {0,3}零至三次
  • 然后[^-]*$任意数量的非连字符和字符串的结尾

选项3:使用否定前瞻

由@Jerry提供:

^(?!(?:[^-]*-){4})[A-Za-z0-9]+$

<强>解释

负向前瞻(?!(?:[^-]*-){4})断言无法找到非连字符后跟连字符四次。

答案 1 :(得分:0)

假设你不想计算连字符,那么这样的事情应该有效:^[A-Z0-9 -]+$

可以使用正则表达式的一个示例here