我需要检查一个字符串是否在单词之间包含空格,但不包括在开头或结尾。假设有以下这些字符串:
1: "how r u ";
2: "how r u";
3: " howru";
那么只有2
应该为真。我该怎么做?
我需要检查一个字符串是否在单词之间包含空格,但不包括在开头或结尾。假设有以下这些字符串:
1: "how r u ";
2: "how r u";
3: " howru";
那么只有2
应该为真。我该怎么做?
你可以验证截取后的字符串是否与原始字符串相等,然后使用strpos
或str_contains
查找空格。
// PHP < 8
if ($str == trim($str) && strpos($str, ' ') !== false) {
echo 'has spaces, but not at beginning or end';
}
// PHP 8+
if ($str == trim($str) && str_contains($str, ' ')) {
echo 'has spaces, but not at beginning or end';
}
如果您感兴趣,以下是更多信息
在这种情况下,如果您使用strpos()
,您不必像通常检查子字符串时一样使用严格比较到false
。通常需要该比较,因为如果字符串以子字符串开头,strpos()
将返回0
,其被视为false
。
这里不可能出现strpos()
返回0
的情况,因为初始比较 $str == trim($str)
排除了字符串以空格开头的可能性,所以您也可以这样使用:
if ($str == trim($str) && strpos($str, ' ')) { ...
如果您想使用正则表达式,可以使用以下内容来检查空格字符:if (preg_match('/^[^ ].* .*[^ ]$/', $str) { ...
或者使用这个来检查是否有任何空格字符:
if (preg_match('/^\S.*\s.*\S$/', $str) { ...
我进行了一些简单的测试(只是定时执行此代码片段的重复操作),trim/strpos解决方案比preg_match解决方案快大约两倍,但我不是正则表达式专家,因此可能有优化表达式以提高性能的可能性。
if (preg_match('/^\S.*\S$/', $str)) {
echo "begins and ends with character other than space";
} else {
echo "begins or ends with space";
}
\S
代表任何非空格字符。
你可以在数组中访问字母
for($i = 1 ; i < strlen($word)-1 ; $i++ )
{
if($word[$i] = " " ;
{
echo "space" ;
}
}
$word
太长会发生什么? - jjoselon