2014-10-07 32 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(如果所有英文字符均有效)開始,然後爲其他有效字符添加其他範圍。


我補充說:「^ _」條件後,但它的工作原理相同的使用和不使用它。

如果你的意思是你在嘗試說「但不能_」,這是現在的字符類是如何工作的補充^_了這一點。他們是積極的或消極的。爲負數,^必須出現在[]內的第一個位置。將^_添加到課程末尾只是將這兩個字符添加到您樂意接受的字符列表中。