2016-12-15 5 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

хех, есть 'stripos' для регистронезависимы проверки – Farkie

+0

@jitendrapurohit: так как строки может содержать символ с акцентом, вместо этого вы должны использовать 'mb_stripos', иначе' stripos' не сможет увидеть, что 'ä' является строчной буквой' Ä'. –

ответ

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

Вы должны рассмотреть возможность использования регистрозависимости версии strpos(): stripos()http://php.net/manual/en/function.stripos.php

Кроме того, если ваш код utf8 символов (что в данном случае), используйте mb_stripos()http://php.net/manual/en/function.mb-stripos.php

другой способ состоит в том, чтобы преобразовать все ваши строки в верхний или нижний регистр перед сравнением

Многие строковые функции в php имеют нечувствительный случайный эквивалент с как раз additionnal "я" в названии (strstr =>stristr, str_replace =>str_ireplace ...)

+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 

Demo

0

Прежде всего, вы должны использовать "" или '' знак при определении переменной со значением строки.

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

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

, то вы можете использовать stripos() вместо strpos().

 Смежные вопросы

  • Нет связанных вопросов^_^