你如何在字符串中找到一个字符串? 我的代码似乎不起作用:
if ( preg_match("/\b" . $needle . "\b/", $string) )
return 'has-error';
鉴于此值:
$string = 'Sub-Category is required.';
$needle = 'Category';
返回TRUE。它应该是FALSE,因为我正在寻找的是" Category"。虽然单词本身在字符串中,但它仍然不被视为它。
谢谢!
答案 0 :(得分:1)
在PHP中,单词边界(\b
)在单词字符(\w
)变为非单词字符(\W
)的位置匹配。字母被认为是单词字符,而-
是非单词字符。因此,字符串Sub-Category
中有四个单词边界:字符串的开头,就在-
字符之前,紧跟在它之后,以及字符串的结尾。
要回到您的问题,preg_match
首先与Sub
的{{1}}部分匹配(并失败),然后继续前进并尝试与{{1}匹配字符串的一部分(和成功)。因此,$string
会返回Category
,如:匹配找到。
为了避免这种情况,您必须手动创建单词边界,例如:
preg_match
在上面的示例中,我们手动将单词边界定义为TRUE
,同时考虑匹配发生在字符串开头/结尾的可能性。
答案 1 :(得分:0)
试试这个正则表达式:
"/".$needle."/i"
所以代码将是:
if ( preg_match("/" . $needle . "/i", $string) )
return 'has-error';
答案 2 :(得分:0)
我不确定我是否理解你的问题。但是当我做对了,你想测试你的字符串$string
完全是否等于你的$needle
(没有区分大小写)?如果是这种情况,我会建议这段代码:
function isAeuqalB($string,$needle) {
if(preg_match("/^".$needle."$/i",$string)) {
return true;
}
return false;
}
isAeuqalB("Category","Category"); // returns true
isAeuqalB("Sub-Category","Category"); // returns false
您的错误在于您确实错过了^
和$
,其中指出$string
需要从{strong>开头来$needle
转换为Category
直到结束。
您的代码只会检查单词$string
是否属于{{1}}。
检查RegEx regex101.com的好网站是{{3}}。
答案 3 :(得分:0)
我找到了答案!
if ( preg_match("/\b[^\-]" . $needle . "/", $validationErrors) )
return 'has-error';