只匹配一个字或连字符

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

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

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

任何帮助将不胜感激。


尝试下面的代码 - 如果我理解你的问题,这将只匹配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

链接地址: http://www.djcxy.com/p/76717.html

上一篇: Match only a word, or a hyphenated word

下一篇: Regular Expression block negation