我有一个输入只匹配字母,但由于某种原因,下划线也算作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;条件较晚,但无论有没有它都可以。
答案 0 :(得分:2)
A-z
包括ASCII 65到122,其中包括下划线(ASCII 95):)
使用A-Za-z
А-я
再次做同样的事情(对于更大的范围)。所以你需要更具体地说明要包含的字符子集。
答案 1 :(得分:0)
问题在于А-я
部分。这表示您可以在A
到я
之间的任何位置使用任何字符。 _
以及许多其他字符出现在该范围内。 A
是code point U+0041; я
是code point U+044F。因此A-я
表示“从U + 0041到U + 044F的任何内容”。 _
为code point U+005F,因此它在此范围内。 \
(U+005C)和其他几百人也是如此。
要修复它,您需要在该字符类中单独列出有效字符的范围,因为А-я
过于宽泛。我不知道您使用的字母表是否足以知道哪些范围有效,但是例如您可以从A-Za-z
开始(如果所有英文字符都有效),然后为其他有效字符添加其他范围
我之后添加了“^ _”条件,但无论有没有它都能正常工作。
如果您的意思是为了说“但不是^_
”而添加_
,那么现在就是角色类的工作方式。它们既是积极的,也是消极的。否定,^
必须出现在[]
内的第一个位置。将^_
添加到类的末尾只会将这两个字符添加到您乐意接受的字符列表中。