【发布时间】:2010-11-25 23:28:49
【问题描述】:
我将如何使用 PHP 函数 preg_match() 来测试字符串以查看是否存在空格?
示例
“这句话将被测试为空格”
“thisOneWouldTestFalse”
【问题讨论】:
标签: php regex preg-match
我将如何使用 PHP 函数 preg_match() 来测试字符串以查看是否存在空格?
“这句话将被测试为空格”
“thisOneWouldTestFalse”
【问题讨论】:
标签: php regex preg-match
如果您对任何空白(包括制表符等)感兴趣,请使用\s
if (preg_match("/\\s/", $myString)) {
// there are spaces
}
如果您只对空格感兴趣,那么您甚至不需要正则表达式:
if (strpos($myString, " ") !== false)
【讨论】:
\n 换行符)。因此,您必须转义斜线(通过添加第二个 ),以便 PHP 将其视为文字斜线。老实说,一个更好的方法是简单地用单引号将字符串括起来,除非您需要从双引号中获得的附加功能。所以简而言之,你可以使用/\s/,只要你把它用单引号括起来,比如preg_match('/\s/', $myString)
另请参阅解决此问题的 this StackOverflow question。
并且,根据您是否要检测制表符和其他类型的空白,您可能需要查看诸如 \b \w 和 [:SPACE:] 之类的 perl 正则表达式语法
【讨论】:
\b 可能无济于事,因为它将匹配字符串的开头和结尾:例如preg_match("/\\b/", "abc") == true
你可以使用:
preg_match('/[\s]+/',.....)
【讨论】:
[\\S]
大写 - 'S' 肯定会起作用。
【讨论】:
为此目的使用 ctype_graph 怎么样?这将扩大空间的范围以表示任何“空白字符”也不会打印屏幕上可见的任何内容(如 \t, \n )。 不过这是原生的,应该比 preg_match 更快。
$x = "string\twith\tspaces" ;
if(ctype_graph($x))
echo "\n string has no white spaces" ;
else
echo "\n string has spaces" ;
【讨论】:
使用更快:
strstr($string, ' ');
【讨论】:
我们也可以使用这个表达式检查空格:
/\p{Zs}/
function checkSpace($str)
{
if (preg_match('/\p{Zs}/s', $str)) {
return true;
}
return false;
}
var_dump((checkSpace('thisOneWouldTestFalse')));
var_dump(checkSpace('this sentence would be tested true for spaces'));
bool(false)
bool(true)
如果您希望简化/更新/探索表达式,已在regex101.com 的右上角面板中进行了说明。如果您有兴趣,可以在this debugger link 中观看匹配步骤或修改它们。调试器演示了a RegEx engine 如何逐步使用一些示例输入字符串并执行匹配过程。
【讨论】: