2016-12-15 1 views
3

Je rencontre un problème avec la comparaison des chaînes de noms. J'ai 3 variablescomparer deux chaîne de nom php

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

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

Je pensais d'utiliser strpos pour voir si le premier nom existe dans le nom complet, mais strpos est sensible à la casse.

J'ai essayé des expressions régulières en utilisant pregmatch mais je ne suis pas sûr comment cela fonctionne.

$pregmatch = preg_match("/$fullname/", $firstName); 
if($pregmatch){ 
    echo " it matches"; 
} 
$pregmatch2 = preg_match("/$fullname2/", $firstName2); 
if($pregmatch2){ 
    echo " it matches"; 
} 
+1

Vous pouvez utiliser 'strpos()' pour insensible à la casse http://php.net/manual/en/function.stripos.php – jitendrapurohit

+0

heh, il y a un 'stripos' pour le cas chèque insensible – Farkie

+0

@jitendrapurohit: depuis les cordes peut contenir du caractère accentué, vous devriez utiliser 'mb_stripos' à la place, sinon' stripos' dans l'impossibilité de voir que 'ä' est le minuscule de' Ä'. –

Répondre

3

Vous devriez envisager d'utiliser le cas la version insensible strpos(): stripos()http://php.net/manual/en/function.stripos.php

De plus, si votre code a des caractères utf8 (ce qui est le cas ici), utilisez mb_stripos()http://php.net/manual/en/function.mb-stripos.php

Une autre façon est de convertir toutes vos chaînes en majuscules ou minuscules avant la comparaison

Beaucoup de fonctions de chaîne en php ont un équivalent insensible à la casse avec une simple additionnelle "i" en leur nom (strstr =>stristr, str_replace =>str_ireplace ...)

+0

J'ai essayé cela, mais pour une raison quelconque, il ne peut pas correspondre à la chaîne de nom. –

5

Vous devez utiliser mb_stripos au lieu de simples stripos pour UTF-8 personnages comme comme

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"; 
} 

Sortie

UTF - 8 string 
Normal String 

Demo

0

Tout d'abord, vous devez utiliser "" ou '' signe lors de la définition d'une variable avec une valeur de chaîne.

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

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

alors vous pouvez utiliser stripos() à la place de strpos().