我希望限制一个字符串,它可以接受字母数字值和hiphen
我提供了3个例子,以便有一个明确的想法
1)AS15JKM-125TR-325AMOR
2)ITEW32-DE432OI
3)09IURE765EDR
没有特定的模式,字符串中可能有0到3个hiphens。 我只是想以这样的方式限制它,它应该只接受字母数字值和 只有Hiphen,没有其他特殊性格。 请帮助我。
答案 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。