正则表达式 - 匹配

时间:2012-05-21 23:54:54

标签: php regex

我需要匹配一个字母数字字。它可以包含“ - ”但不包含在结尾或开头,并且“ - ”不得重复(如“ - ”),字长必须在2到24个字符之间。

一些例子:

adfg
asd-asdasd
asd-asd-asd

这些不应该匹配:

-asd
asd-
-asd-
-asd--asd-

3 个答案:

答案 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})

可能会让您了解您的问题。