2016-12-15 248 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()。