PHP正则表达式 - 仅匹配单词或带连字符的单词

时间:2014-01-29 16:34:49

标签: php regex string preg-match

我正在尝试使用preg_match进行表单验证。正则表达式需要匹配任何不包含字符的输入,以及后跟连字符后跟多个字符的字符。

换句话说,正则表达式应该捕获任何不是由字符[a-z]和带连字符的单词组成的单词的输入(中间只有一个连字符)。

正则表达式还应该捕获带有连字符的单词(连字符后面没有其他单词,例如“hello-”),并且还应该使用起始连字符(例如“-hello”)来捕获单词。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

尝试使用以下代码 - 如果我理解了您的问题,则只会匹配john-smith,这就是您想要的。注意 - 这几乎正是@Wrikken在之前的评论中提出的。

<?php
$test = array("john-smith", "123john", "john-", "john and mary smith");
$regex = '/^([a-z]+(?:-[a-z]+)?)$/i';
foreach($test as $t) {
  if(preg_match($regex, $t, $m)) {
    echo "$t matches!\n";
  }
}
?>

上的演示

http://regex101.com/r/aU3qM0