2014-10-07 60 views
0

我有一个输入只匹配字母,但由于某些原因,下划线也算作OK符号。JQuery - 匹配中的下划线()

$(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" /> 

我后来添加了“^ _”条件,但它在没有它的情况下也是一样的。

+0

我刚刚意识到反斜杠也是这样。 – 2014-10-07 08:37:06

回答

2

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

使用A-Za-z

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

+0

嘿!你是完全正确的。谢谢。 – 2014-10-07 08:50:11

0

问题是А-я部分。那就是说你会从Aя之间的任何角色。 _和许多其他字符出现在该范围内。 Acode point U+0041; яcode point U+044F。所以A-я的意思是“从U + 0041到U + 044F的任何东西”。 _code point U+005F,所以它在这个范围内。所以\U+005C)和其他几百人。

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


我补充说:“^ _”条件后,但它的工作原理相同的使用和不使用它。

如果你的意思是你在尝试说“但不能_”,这是现在的字符类是如何工作的补充^_了这一点。他们是积极的或消极的。为负数,^必须出现在[]内的第一个位置。将^_添加到课程末尾只是将这两个字符添加到您乐意接受的字符列表中。