比较两个 PHP 名称字符串

3

我在比较名称字符串时遇到了问题。 我有三个变量:

$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/zh/function.stripos.php - jitendrapurohit
哦,有一个stripos可以进行不区分大小写的检查。 - Farkie
由于字符串可能包含重音字符,因此您应该使用mb_stripos,否则stripos无法看到äÄ的小写形式。 - Casimir et Hippolyte
4个回答

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

演示


3
你应该考虑使用不区分大小写的版本strpos(): stripos()http://php.net/manual/zh/function.stripos.php 此外,如果您的代码中有utf8字符(这里是这种情况),请使用mb_stripos()http://php.net/manual/zh/function.mb-stripos.php 另一种方法是在比较之前将所有字符串转换为大写或小写。
许多php中的字符串函数都有一个不区分大小写的等效函数,在其名称中只需添加一个额外的“i”即可(strstr => stristrstr_replace => str_ireplace ...)

我尝试过这个,但出于某些原因它无法匹配lastname字符串。 - Masnad Nihit

3

0
首先,在定义具有字符串值的变量时,应使用“”或''符号。
$fullname = 'MASNAD HOSSAIN NEHITH';
$firstName = 'Masnad';
$LastName = 'Nehith';

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

那么你可以使用stripos()代替strpos()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接