我在比较名称字符串时遇到问题。 我有3个变量
$fullname = 'MASNAD HOSSAIN NEHITH';
$firstName = 'Masnad';
$LastName = 'Nehith';
$fullname2 = 'MÄSNAD HOSSAIN NEHITH';
$firstName2 = 'Mäsnad';
$LastName2 = 'Nehith';
我想过使用strpos
查看全名中是否存在名字,但strpos
区分大小写。
我尝试了使用pregmatch的正则表达式,但我不确定它是如何工作的。
$pregmatch = preg_match("/$fullname/", $firstName);
if($pregmatch){
echo " it matches";
}
$pregmatch2 = preg_match("/$fullname2/", $firstName2);
if($pregmatch2){
echo " it matches";
}
答案 0 :(得分:5)
您需要使用mb_stripos
代替简单stripos
来代替UTF-8
个字符
if(mb_stripos('MÄSNAD HOSSAIN NEHITH', 'Mäsnad') !== false)
{
echo "UTF - 8 string".PHP_EOL;
}
if(mb_stripos('MASNAD HOSSAIN NEHITH', 'Masnad') !== false)
{
echo "Normal String";
}
<强>输出强>
UTF - 8 string
Normal String
答案 1 :(得分:3)
您应该考虑使用不区分大小写的strpos()
版本:stripos()
http://php.net/manual/en/function.stripos.php
此外,如果您的代码具有utf8字符(此处就是这种情况),请使用mb_stripos()
http://php.net/manual/en/function.mb-stripos.php
另一种方法是在比较之前将所有字符串转换为大写或小写
php中的许多字符串函数都有一个不敏感的大小写,只有一个名字中的附加“i”(strstr
=&gt; stristr
,str_replace
=&gt; {{1} } ...)
答案 2 :(得分:3)
将preg_match
功能与ui
修饰符一起使用(以匹配 UTF-8 字符并匹配大写和小写字母):
$fullname2 = 'MÄSNAD HOSSAIN NEHITH';
$firstName2 = 'Mäsnad';
if (preg_match("/$firstName2/ui", $fullname2)){
echo "it matches";
}
http://php.net/manual/en/reference.pcre.pattern.modifiers.php
答案 3 :(得分:0)
首先,在使用字符串值定义变量时,应使用“”或“”符号。
<a href="..document path" class="confirmation">Download document</a>
...
<script type="text/javascript">
var elems = document.getElementsByClassName('confirmation');
var confirmIt = function (e) {
if (!confirm('Do you agree...?')) e.preventDefault();
};
for (var i = 0, l = elems.length; i < l; i++) {
elems[i].addEventListener('click', confirmIt, false);
}
</script>
然后你可以使用stripos()而不是strpos()。