preg_match空白问题

时间:2011-02-21 22:53:51

标签: php regex preg-match

我需要写一个正则表达式,但由于某种原因我不能得到\ s来找到空格, 我在努力......

$name = "a ";

if( preg_match('^[a-z]+\s$', $name)){
  echo "match";
} else {
  echo "no match";
}

我也试过

preg_match('^[a-z\s]+$');

preg_match('^[a-z]/\s/$');

我只是没有比赛。 完整的正则表达式需要允许1个或多个小写字母,然后是一个空格,然后是一个大写字母后跟一个或多个小写字母,但是......

preg_match('^[a-z]+\s[A-Z][a-z]+$');

不能正常工作,因为我希望它可以用于我在网络上看到的教程(sitepoint等...)。

有人对此有所了解吗?

1 个答案:

答案 0 :(得分:7)

您必须在表达式中添加delimiters(docs)

$name = "a ";

if( preg_match('/^[a-z]+\s$/', $name)){
//              ^          ^
//              └----------┴----- here: slash as delimiter
  echo "match";
} else {
  echo "no match";
}

这里我使用斜杠/,但您可以自由选择分隔符(好吧,不是那么多:任何非字母数字,非反斜杠,非空格字符 )。


确保将错误报告设置为包含警告,例如添加error_reporting(E_ALL)。然后你会看到这个警告:

  

警告:preg_match():在...中找不到结束分隔符'^'...   没有比赛

PHP将字符串中的第一个字符视为分隔符,因此在您的情况下为^