PHP 检查字符串是否包含单词之间的空格(不在开头或结尾)

新手上路,请多包涵

我需要检查一个字符串是否包含单词之间的空格,但不在开头或结尾。假设有这些字符串:

 1: "how r u ";
2: "how r u";
3: " howru";

那么只有 2 应该是真的。我怎么能那样做?

原文由 Eddy Unruh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 698
2 个回答

您可以验证修剪后的字符串是否等于原始字符串,然后使用 strposstr_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 解决方案的两倍,但我不是正则表达式大师,所以表达式可以优化为提高性能。

原文由 Don‘t Panic 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您的字符串至少有两个字符长,您可以使用:

 if (preg_match('/^\S.*\S$/', $str)) {
    echo "begins and ends with character other than space";
} else {
    echo "begins or ends with space";
}

其中 \S 代表任何不是空格的字符。

原文由 Toto 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏