JQuery - 匹配中的下划线()

时间:2014-10-07 08:33:30

标签: jquery regex

我有一个输入只匹配字母,但由于某种原因,下划线也算作ok符号。

$(document).ready(function() {
        $('#first_name').bind('input', function() {
            if (!$(this).val().match("^[A-zА-я^_]{3,}$")) {
                $('#first_name').css('background-color', 'rgb(250,171,192)');
                $('#first_name').css('border-color', 'rgb(180,86,109)');
            }
            else {
                $('#first_name').css('background-color', 'rgb(193,256,159)');
                $('#first_name').css('border-color', 'rgb(31,122,23)');
            }
        });
    });

<input type="text" id="first_name" />

我添加了&#34; ^ _&#34;条件较晚,但无论有没有它都可以。

2 个答案:

答案 0 :(得分:2)

A-z包括ASCII 65到122,其中包括下划线(ASCII 95):)

使用A-Za-z

А-я再次做同样的事情(对于更大的范围)。所以你需要更具体地说明要包含的字符子集。

答案 1 :(得分:0)

问题在于А-я部分。这表示您可以在Aя之间的任何位置使用任何字符。 _以及许多其他字符出现在该范围内。 Acode point U+0041; яcode point U+044F。因此A-я表示“从U + 0041到U + 044F的任何内容”。 _code point U+005F,因此它在此范围内。 \U+005C)和其他几百人也是如此。

要修复它,您需要在该字符类中单独列出有效字符的范围,因为А-я过于宽泛。我不知道您使用的字母表是否足以知道哪些范围有效,但是例如您可以从A-Za-z开始(如果所有英文字符都有效),然后为其他有效字符添加其他范围


  

我之后添加了“^ _”条件,但无论有没有它都能正常工作。

如果您的意思是为了说“但不是^_”而添加_,那么现在就是角色类的工作方式。它们既是积极的,也是消极的。否定,^必须出现在[]内的第一个位置。将^_添加到类的末尾只会将这两个字符添加到您乐意接受的字符列表中。