在我的ASP.NET MVC项目中是一个正则表达式,用于验证带有字母数字字符和破折号的字符串,同时也不允许使用前导或尾部破折号:
^(([a-zA-Z0-9]{1,}?)(\-{0,}?)([a-zA-Z0-9]{1,}?))+$
这适用于大多数用例:
safename (valid)
123 (valid)
there-is-something-here (valid)
your-name-goes-here (valid)
-something-is-up (invalid)
say-what- (invalid)
但是,有些用例我想要有效,但不是:
a-b (valid)
a-bc-d (valid)
ab-cd-e (valid)
a-bc-de (valid)
this-is-a-test (invalid)
a-b-c (invalid)
1-2-3 (invalid)
我可以有一个前导和/或尾随字符,但不能在字符串的其余部分中包含单个字符。我希望a-b-c
或1-2-3
有效,但我尝试的任何修改都没有产生预期的结果。我对第一组和第三组做了一个小改动,但是前导和尾随破折号通过了:
^(([a-zA-Z0-9]{0,}?)(\-{0,}?)([a-zA-Z0-9]{0,}?))+$
我已经达到了正则表达式的限制,并会感谢任何指导。我正在寻找一个表达式的结果吗?
答案 0 :(得分:2)
您可以使用以下内容:
^[a-zA-Z0-9]+(?:--?[a-zA-Z0-9]+)*$
如果您想在每个字母数字字符之间只允许一个短划线。否则,请将-
转为-+
多个破折号。
答案 1 :(得分:2)
我用该表达式尝试了所有用例:
^[a-zA-Z0-9]+([-][a-zA-Z0-9]+)+$
1-2-3有效; 1-2-无效
答案 2 :(得分:1)