允许字符串中的破折号但不是几个连续破折号

时间:2012-02-16 09:29:40

标签: php regex

这是一个正则表达式,其中字符串必须以字母数字字符开头和结尾,并且可以包含字母数字字符和短划线。

/^[a-zA-Z0-9]{1}[a-zA-Z0-9\-]+[a-zA-Z0-9]{1}$/

如何确保不允许连续破折号?例如:

should allow: some-string

should NOT allow: some--string

由于

编辑:我想允许几个短划线,而不是连续。例如“some-thing-here”是好的,“some-thing”不是。

4 个答案:

答案 0 :(得分:7)

不需要带有可选短划线的复杂模式只需使用:

/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/

here on Regexr

从至少一个字母数字开始。然后可能会有一个冲刺,然后至少有一个字母数字0次以上。

答案 1 :(得分:1)

/^[a-zA-Z0-9]+-?[a-zA-Z0-9]+$/

?表示“发生零次或一次”

要允许多个片段用一个短划线分隔,请将其更改为:

/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/

(...)*表示最后一组(以-开头)可能会重复零次或多次。

答案 2 :(得分:1)

类似的东西:

/^[a-zA-Z0-9]{1}\-?([a-zA-Z0-9]+\-?)*[a-zA-Z0-9]{1}$/

关键部分为\-?([a-zA-Z0-9]+\-?)*,使其显示为“字母/数字,可选短划线,任意数量(某些字母/数字,可选地后跟短划线),以字母或数字结尾。”< / p>

这允许some-stringmy-double-dash-string但不允许my-double--dash-string

答案 3 :(得分:0)

/^[a-zA-Z0-9]+-?[a-zA-Z0-9]+$/ 应该工作我相信。您不需要区分字母字符的初始组和结束组。只需要期望每个破折号都被这样的角色所包围。