【问题标题】:Ignore case sensitivity when comparing strings in PHP在 PHP 中比较字符串时忽略大小写敏感
【发布时间】:2020-08-13 22:41:01
【问题描述】:

我正在尝试比较单词是否相等,大小写 [upper and lower] 无关紧要。 然而PHP似乎不同意!关于如何强制 PHP 在比较单词时忽略大小写的任何想法?

$arr_query_words = ["hat","Cat","sAt","maT"];
for( $j= 0; $j < count($arr_query_words); $j++ ){
    $story_body = str_replace( 
        $arr_query_words[ $j ],
        '<span style=" background-color:yellow; ">' . $arr_query_words[ $j ] . '</span>',
        $story_body
   );
}

即使情况不同,有没有办法进行替换?

【问题讨论】:

  • 我已经更新了我的答案,希望能回答你想问的问题!

标签: php


【解决方案1】:

使用str_ireplace 执行不区分大小写的字符串替换(str_ireplace 可从 PHP 5 获得):

$story_body = str_ireplace($arr_query_words[$j],
   '<span style=" background-color:yellow; ">'. $arr_query_words[$j]. '</span>',
    $story_body);

要不区分大小写比较字符串,请使用strcasecmp

<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
    echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>

【讨论】:

  • 很高兴知道:) 我一直在做 strtolower($var1) == strtolower($var2) 做不区分大小写的比较
  • 我会怎么做。对于常规字符串比较,我总是使用区分大小写的兄弟'strcmp',你永远不会对 PHP 的松散类型过于小心。
  • 根据您要比较的内容,您可能需要添加修剪以清除尾随空格。 if(strcasecmp(trim($var1), trim($var2)) == 0) {}
  • 如果要使用strtolower方法,请使用strcmp(mb_strtolower($var1), mb_strtolower($var2)) 来考虑多字节字符串。
【解决方案2】:

实现这一点的最简单、最广泛支持的方法可能是在比较两个字符串之前将它们小写,如下所示:

if(strtolower($var1) == strtolower($var2)) {
    // Equals, case ignored
}

您可能想要修剪正在比较的字符串,只需使用类似的东西来实现此功能:

if(strtolower(trim($var1)) == strtolower(trim($var2))) {
    // Equals, case ignored and values trimmed
}

【讨论】:

  • strtolower方法很常用,trim的建议绝对有用,谢谢
【解决方案3】:
$var1 = "THIS is A teST";
$var2 = "this is a tesT";
if (strtolower($var1) === strtolower($var2) ) {
    echo "var1 and var2 are same";
}

strtolower 将字符串转换为小写

【讨论】:

    【解决方案4】:
    if(!strcasecmp($str1, $str2)) ... //they are equals ignoring case
    

    strcasecmp 仅当字符串等于忽略大小写时才返回 0,因此 !strcasecmp 如果它们等于忽略大小写则返回 true,否则返回 false

    http://php.net/manual/en/function.strcasecmp.php

    【讨论】:

    • 也许有些纯粹主义者不喜欢 !0 而更喜欢 !=0,我不是其中之一,更喜欢更小的代码 :D
    猜你喜欢
    • 2011-02-06
    • 2016-01-29
    • 2016-11-18
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多