2016-12-15 240 views
3

我在比较名称字符串时遇到问题。 我有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"; 
} 
+1

你可以使用'stripos()'来区分大小写http://php.net/manual/en/function.stripos.php – jitendrapurohit

+0

heh,有一个'stripos'用于区分大小写检查 – Farkie

+0

@jitendrapurohit:由于字符串可能包含重音字符,您应该使用'mb_stripos',否则'stripos'无法看到'ä'是'Ä'的小写字母。 –

回答

3

你应该考虑使用strpos()不区分大小写的版本:stripos()http://php.net/manual/en/function.stripos.php

另外,如果您的代码UTF8字符(在这里是的情况下),使用mb_stripos()http://php.net/manual/en/function.mb-stripos.php

的其他方式在比较之前将所有字符串转换为大写或小写

php中的许多字符串函数都具有等效与只是一个其它附加在他们的名字(strstr =>stristrstr_replace =>str_ireplace ...)的 “i”

+0

我试过了,但由于某种原因,它不能匹配姓氏字符串。 –

5

您需要使用mb_stripos,而不是简单的striposUTF-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 

Demo

0

首先,你应该使用 “” 或 '' 定义与字符串值变量时签署。

$fullname = 'MASNAD HOSSAIN NEHITH'; 
$firstName = 'Masnad'; 
$LastName = 'Nehith'; 

$fullname2 = 'MÄSNAD HOSSAIN NEHITH'; 
$firstName2 = 'Mäsnad'; 
$LastName2 = 'Nehith'; 

然后您可以使用stripos()而不是strpos()。