考虑:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
假设我有上面的代码,如果($a包含“are”),写语句的正确方法是什么?
考虑:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
假设我有上面的代码,如果($a包含“are”),写语句的正确方法是什么?
当前回答
使用stripos()使用不区分大小写的匹配:
if (stripos($string,$stringToSearch) !== false) {
echo 'true';
}
其他回答
虽然这些答案中的大多数都会告诉你字符串中是否出现了子字符串,但如果你要查找的是一个特定的单词,而不是子字符串,那么这通常不是你想要的。
有什么不同?子字符串可以出现在其他单词中:
“area”开头的“are”“野兔”末尾的“are”“are”位于“fare”的中间
缓解这种情况的一种方法是使用正则表达式和单词边界(\b):
function containsWord($str, $word)
{
return !!preg_match('#\\b' . preg_quote($word, '#') . '\\b#i', $str);
}
这种方法没有上面提到的假阳性,但它有自己的一些边缘情况。单词边界与非单词字符(\W)匹配,这些字符将是非a-z、a-z、0-9或_的任何字符。这意味着数字和下划线将被计算为单词字符,类似这样的场景将失败:
“你在想什么?”中的“是”“哦,你不知道那些是4吗?”
如果你想要比这更准确的东西,你必须开始进行英语语法分析,这是一个相当大的蠕虫(而且假设语法使用正确,但这并不总是给定的)。
许多使用subst_count的答案会检查结果是否大于0。但由于if语句将零视为false,因此可以避免该检查并直接写入:
if (substr_count($a, 'are')) {
若要检查是否不存在,请添加!操作员:
if (!substr_count($a, 'are')) {
如果只想检查一个字符串是否包含在另一个字符串中,请不要使用preg_match()。改用strpos()或strstr(),因为它们会更快。(http://in2.php.net/preg_match)
if (strpos($text, 'string_name') !== false){
echo 'get the string';
}
这里有一个小的实用函数,在这种情况下很有用
// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
return strpos($haystack, $needle) !== false;
}
我认为一个好主意是使用mb_stpos:
$haystack = 'How are you?';
$needle = 'are';
if (mb_strpos($haystack, $needle) !== false) {
echo 'true';
}
因为此解决方案区分大小写,并且对所有Unicode字符都是安全的。
但你也可以这样做(sauch的回应还没有):
if (count(explode($needle, $haystack)) > 1) {
echo 'true';
}
此解决方案对Unicode字符也区分大小写并安全。
此外,在表达式中不使用否定,这会增加代码的可读性。
以下是使用函数的其他解决方案:
function isContainsStr($haystack, $needle) {
return count(explode($needle, $haystack)) > 1;
}
if (isContainsStr($haystack, $needle)) {
echo 'true';
}