比较两个名称字符串php
我在比较名称字符串时遇到问题。 我有3个变量比较两个名称字符串php
$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";
}
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
你应该考虑使用strpos()
不区分大小写的版本:stripos()
http://php.net/manual/en/function.stripos.php
另外,如果您的代码UTF8字符(在这里是的情况下),使用mb_stripos()
http://php.net/manual/en/function.mb-stripos.php
的其他方式在比较之前将所有字符串转换为大写或小写
php中的许多字符串函数都具有等效与只是一个其它附加在他们的名字(strstr
=>stristr
,str_replace
=>str_ireplace
...)的 “i”
我试过了,但由于某种原因,它不能匹配姓氏字符串。 –
您需要使用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
首先,你应该使用 “” 或 '' 定义与字符串值变量时签署。
$fullname = 'MASNAD HOSSAIN NEHITH';
$firstName = 'Masnad';
$LastName = 'Nehith';
$fullname2 = 'MÄSNAD HOSSAIN NEHITH';
$firstName2 = 'Mäsnad';
$LastName2 = 'Nehith';
然后您可以使用stripos()而不是strpos()。
你可以使用'stripos()'来区分大小写http://php.net/manual/en/function.stripos.php – jitendrapurohit
heh,有一个'stripos'用于区分大小写检查 – Farkie
@jitendrapurohit:由于字符串可能包含重音字符,您应该使用'mb_stripos',否则'stripos'无法看到'ä'是'Ä'的小写字母。 –