-3

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

一些例子:

adfg
asd-asdasd
asd-asd-asd

这些不应该匹配:

-asd
asd-
-asd-
-asd--asd-
4

3 回答 3

1

使用正则表达式最困难的事情之一就是抵制过度聪明的诱惑。你有两个独立的、不兼容的测试要执行。长度:

/^.{2,24}$/

...和组成:

/^[A-Z0-9]+(?:-[A-Z0-9]+)*$/i

虽然可能想出一个可以一次性执行两个测试的正则表达式,但没有必要。只需执行其中一项作为前瞻:

/^(?=.{2,24}$)[A-Z0-9]+(?:-[A-Z0-9]+)*$/i
于 2012-05-22T03:34:31.960 回答
0

试试这个 PCRE reg exp:

/^(([0-9a-z]+-)*[0-9a-z]){2,24}$/i
于 2012-05-21T23:58:46.137 回答
0

正则表达式取决于您使用的平台,并且它们不太适合匹配大小(如果您尝试确定特定长度,您可能会失去灵活性,除非您检查更标准化的输入,例如日期:\d{2}/\d{2}/\d{4})。但是类似:

[a-z]+(-[a-z]+)*

可能会给你一个关于你的问题的想法。

于 2012-05-22T00:02:14.563 回答