我将创建一个匹配以下内容的正则表达式:
字符串应该只包含小写字母数字字符(a-z),并且应该允许单个“ - ”。例如,'trash-bin'应该没问题,但是'trash-bin'或'-bin'不应该。
正则表达式应该如何?如果可以解释的话,我会很高兴。
如果到目前为止就是这样:
/^[0-9a-z]+-+$/
UPDATED TO:
^(\ A - ?!)+ [0-9A-Z] + - $
我不知道的是如何禁止其中几个 - 相互关注,或者禁止字符串以 - 开头。
答案 0 :(得分:1)
^([a-z0-9]+(\-[a-z0-9]+)*)$
这可能会成功。在http://www.regextester.com/进行测试(选择 preg 方言,因为它是php的preg_*
函数使用的方言)
答案 1 :(得分:0)
您想要^[a-z0-9]+(-[a-z0-9]+)*$
:
$str=array("trash-bin","TRASH-Bin","232trash-bin","-trash-bin","trash","t--b");
foreach ($str as $val) {
preg_match('/^[a-z0-9]+(-[a-z0-9]+)*$/',$val,$match);
echo $match[0];
}
>>> trash-bin
>>> 123trash-bin
>>> trash
Regexplanation:
^ # Match the start of the string
[a-z0-9]+ # Followed by one or more lowercase letter or digit
(- # Followed by an hyphen
[a-z0-9]+ # Followed by one or more lowercase letter or digit
)* # Pattern inside brackets can occur zero or more times
$ # Followed by the end of the string
答案 2 :(得分:0)
如果你只需要一个连字符,并且也只需要两个或更多个字符(所有小写字母),那么也许你可以取消以下内容:
^[a-z0-9]+-?[a-z0-9]+$
答案 3 :(得分:0)
首先发现字符串以字母数字开头,并持续一段时间(一个或多个必需匹配)。
然后我们启动一个子模式,这样我们可以确保如果你匹配字符串中的连字符,你还需要匹配更多的字母数字。
在子模式中允许单个 - (转义以避免否定下面的类)
跟随一些字母数字(一个或多个必需的匹配)。 关闭子模式。 [从你原来的问题来看,目前尚不清楚是否只允许在字符串中使用一个短划线,或者只要它们不连续就可以允许多个短划线。如果允许的倍数,则允许零个或多个子模式匹配。否则允许零或一个匹配]
然后模式是:
^([:alnum:]+(\-[:alnum:]+)?)$
(只允许一个破折号,或者没有)或
^([:alnum:]+(\-[:alnum:]+)*)$
对于潜在的多个破折号但不连续(即没有双破折号)