我需要匹配一个字母数字字。它可以包含“ - ”但不包含在结尾或开头,并且“ - ”不得重复(如“ - ”),字长必须在2到24个字符之间。
一些例子:
adfg
asd-asdasd
asd-asd-asd
这些不应该匹配:
-asd
asd-
-asd-
-asd--asd-
答案 0 :(得分:1)
使用正则表达式最困难的事情之一是抵制过度聪明的诱惑。您需要执行两个单独的,不兼容的测试。长度:
/^.{2,24}$/
......和作文:
/^[A-Z0-9]+(?:-[A-Z0-9]+)*$/i
虽然可能可以提出一个可以一次执行两个测试的正则表达式,但是没有必要。只需将其中一个作为前瞻:
/^(?=.{2,24}$)[A-Z0-9]+(?:-[A-Z0-9]+)*$/i
答案 1 :(得分:0)
试试这个PCRE reg exp:
/^(([0-9a-z]+-)*[0-9a-z]){2,24}$/i
答案 2 :(得分:0)
正则表达式取决于您使用的平台,并且它们不适合匹配大小(如果您尝试确定特定长度,您可能会失去灵活性,除非您检查更多标准化输入,例如日期:{ {1}}。 但是类似的东西:
\d{2}/\d{2}/\d{4})
可能会让您了解您的问题。