关于javascript:如何比较两个字符串而不管它们的大小写?

How to compare two strings regardless of their capitalization?

我有:

1
mytext = jQuery('#usp-title').val();

然后我做

1
if(jQuery("#datafetch h2 a").text() == mytext) {

但有一个标题可以是:

Space MissionSpace Mission一样

由于其他原因,我无法将文本格式标准化,因此我真的希望比较两个字符串,而不考虑它们的大写。

更新

问题是,我使用输入字段作为搜索,这样用户可以键入Space Mission,而文章标题将是Space Mission,因此搜索结果不准确,我需要准确的短语。

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function fetch(){
  jQuery('#datafetch').empty();
  mytext = jQuery('#usp-title').val();
    jQuery.ajax({
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        type: 'post',
        data: { action: 'data_fetch', exactwords:  mytext },
        success: function(data) {
            jQuery('#datafetch').html( data );
        if(jQuery("#datafetch h2 a").text().toLowerCase().trim() == mytext.toLowerCase().trim()) {
            jQuery("#componi").attr("disabled","disabled").hide();
        } else {
                jQuery("#componi").removeAttr("disabled","disabled").show();
        }
            if(jQuery("#datafetch h2 a").text() != mytext) {
            jQuery("#fatto").hide();
            jQuery('#datafetch').empty();
        }
        }
    });

}

事实上,这更棘手,因为搜索来自于文本输入,所以这是关于Ajax的查询,我认为不仅仅是资本化,只是一个想法。上面的最新代码通过键入以下内容没有结果:

Space Mission,职务为Space Mission

更新2

文章标题:

1
Space Mission

用户搜索

1
Space Mission

console.log(数据)给出正确的结果

1
2
3
4
5
6
7
8
9
10
   <ul class="list-unstyled margin-top-80">
       
<li>

            Space Mission
       
</li>

   
</ul>

但这并没有发生:

1
jQuery('#datafetch').html( data );

如果我插入正确的单词Space Mission是吗?


隐藏两个toLowercase()

1
"Space Mission".toLowerCase() =="space mission".toLowerCase()

在你的问题中

1
if(jQuery("#datafetch h2 a").text().toLowerCase() == mytext.toLowerCase()) {

根据@charlietfl的建议,在用户进入尾随空格或前导空格时进行剪裁

1
if(jQuery("#datafetch h2 a").text().trim().toLowerCase() == mytext.trim().toLowerCase()) {


接受的答案是正确的,它确实回答了我原来的问题,这就是我接受它的原因。但是,使用setTimeout(function()解决了这个问题,因为填充DIV的数据和检查2值比较之间有一点延迟。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function fetch(){
        jQuery.ajax({
            url: '<?php echo admin_url('admin-ajax.php'); ?>',
            type: 'post',
            data: { action: 'data_fetch', exactwords:  jQuery('#usp-title').val() },
            success: function(data) {
                    jQuery("#datafetch").html(data);
                    setTimeout(function() {
                        var text1 = jQuery("#datafetch").find("h2").find("a").html();
                        var text1B = text1.toLowerCase();
                        var text2 = jQuery('#usp-title').val();
                        var text2B = text2.toLowerCase();
                        if(text1B == text2B) {
                            jQuery("#componi").attr("disabled","disabled").hide();
                        } else {
                            jQuery("#componi").removeAttr("disabled","disabled").show();
                            jQuery("#fatto").hide();
                            jQuery('#datafetch').empty();
                        }
                    }, 1000);
            }
        });
}

更新

使用.promise().done()比较好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function fetch(){
    var text1;
    var text1B;
    var text2;
    var text2B;
        jQuery.ajax({
            url: '<?php echo admin_url('admin-ajax.php'); ?>',
            type: 'post',
            data: { action: 'data_fetch', exactwords:  jQuery('#usp-title').val() },
            success: function(data) {
                    jQuery("#datafetch").html(data).promise().done(function(){
                        text1 = jQuery("#datafetch").find("h2").find("a").html();
                        text1B = text1.toLowerCase();
                        text2 = jQuery('#usp-title').val();
                        text2B = text2.toLowerCase();
                        if (text1B != text2B) {
                            jQuery("#componi").removeAttr("disabled","disabled").show();
                            jQuery("#fatto").hide();
                            jQuery('#datafetch').empty();
                        } else if (text1B == text2B) {
                            jQuery("#componi").attr("disabled","disabled").hide();
                        }
                    });
            }
        });
}

更新二

这是我最后用的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function fetch(){
  jQuery.ajax({
    url: '<?php echo admin_url('admin-ajax.php'); ?>',
    type: 'post',
    data: { action: 'data_fetch', exactwords:  jQuery('#usp-title').val() },
    success: function(data) {
      var text2;
      var text2B;
      text2 = jQuery('#usp-title').val();
      text2B = text2.toLowerCase();
      jQuery("#datafetch").html(data).promise().done(function(){
        jQuery("#datafetch ul li h2 a").each(function() {
          var $this = jQuery(this);
          if ($this.text().toLowerCase() !== text2B) {
            $this.parent().parent().hide();
          } else if (text1B == text2B) {
            jQuery("#componi").attr("disabled","disabled").hide();
          }
        });
      });
    }
  });
}


使用jquery获取输入结果

1
var string = jQuery("#datafetch h2 a").text()

然后你可以尝试以下任何一种方法-

简单字符串比较:将两者转换为相同的大小写:

1
string.toUpperCase() ==="String".toUpperCase()

如果您对regex满意(请注意regex中的i选项):

1
2
var otherString = /String/i
otherString.test(string)

还有"匹配"功能:

1
string.match(/STRING/i)

未找到匹配项时match返回空值


将两个字符串都转换为大写或小写


您将需要将两个字符串都转换为小写或大写,然后进行比较。

1
2
3
4
5
    var mytext = jQuery('#usp-title').val();
    if(jQuery("#datafetch h2 a").text().toLowerCase() == mytext.toLowerCase())
    {

    }

你可以这样做

1
"Space Mission".replace(/\s+/g,"").toLowerCase() =="space    mission".replace(/\s+/g,"").toLowerCase()

左侧等于spacemission,与右侧sade的表达式相同。

它将首先删除任何空白,即使在单词之间,也将转换为小写。由于space missionspace mission不同,因此需要删除空白。