比较两个名字串php

时间:2016-12-15 09:08:56

标签: php regex preg-match

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

4 个答案:

答案 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

答案 1 :(得分:3)

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

此外,如果您的代码具有utf8字符(此处就是这种情况),请使用mb_stripos() http://php.net/manual/en/function.mb-stripos.php

另一种方法是在比较之前将所有字符串转换为大写或小写

php中的许多字符串函数都有一个不敏感的大小写,只有一个名字中的附加“i”(strstr =&gt; stristrstr_replace =&gt; {{1} } ...)

答案 2 :(得分: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 :(得分:0)

首先,在使用字符串值定义变量时,应使用“”或“”符号。

<a href="..document path" class="confirmation">Download document</a>
...
<script type="text/javascript">
    var elems = document.getElementsByClassName('confirmation');
    var confirmIt = function (e) {
        if (!confirm('Do you agree...?')) e.preventDefault();
    };
    for (var i = 0, l = elems.length; i < l; i++) {
        elems[i].addEventListener('click', confirmIt, false);
    }
</script>

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