Javascript 仅限正则表达式字母按键作为事件
我想知道这里有什么问题Javascript 仅限正则表达式字母按键作为事件,javascript,jquery,regex,bind,keypress,Javascript,Jquery,Regex,Bind,Keypress,我想知道这里有什么问题 $("#city_field").bind({ keypress: function(event){ var regex = /^[a-zA-ZäöüÄÖÜ]/; if (regex.test($("#city_field").val())==true) { $('.r_validation').html('').css('background-color', ''); } else { $('.validation'
$("#city_field").bind({
keypress: function(event){
var regex = /^[a-zA-ZäöüÄÖÜ]/;
if (regex.test($("#city_field").val())==true) {
$('.r_validation').html('').css('background-color', '');
} else {
$('.validation').html("TEST").css('background-color', 'red');
}
}
});
每当我输入字母时,它是有效的,然后当我输入数字时,红色的验证通知就会出现。在这一点上一切都很好,直到我在字母后输入数字。以下内容应无效,但在我当前的脚本中它被视为有效:
- foo1212
- foo,
- foo,[逗号后加空格]
$(function(){
$("#city_field").bind("keyup",
function(event) {
var regex = /^[a-zA-ZäöüÄÖÜ]+$/;
if (regex.test($("#city_field").val())==true) {
$('.validation').html('').css('background-color', '');
} else {
$('.validation').html("TEST").css('background-color', 'red');
}
});
});
您的正则表达式只匹配一个字符。您需要将该输入置于Kleene闭包之上,然后放置一个字符串结束标记:
/^[a-zA-ZäöüÄÖÜ]*$/;
或者,如果要确保至少有一个字符,可以使用正闭包:
/^[a-zA-ZäöüÄÖÜ]+$/;
产生:
var r = /^[a-zA-ZäöüÄÖÜ]+$/;
console.log(r.test('Foo')); //true
console.log(r.test('Foo123')); //false
console.log(r.test('foo,')); //false
console.log(r.test('foo, ')); //false
console.log(r.test('foo ')); //false
另外,请确保捕捉到keyup
事件,因为keypress
在文本框中的文本更新之前触发,因此您总是在验证后面的一个字符
所以在你的正则表达式上:
/^[a-zA-ZäöüÄÖÜ]/;
测试
Foo123
时会消耗F
,就是这样。完成了 您的正则表达式只匹配一个字符。您需要将该输入置于Kleene闭包之上,然后放置一个字符串结束标记:
/^[a-zA-ZäöüÄÖÜ]*$/;
或者,如果要确保至少有一个字符,可以使用正闭包:
/^[a-zA-ZäöüÄÖÜ]+$/;
产生:
var r = /^[a-zA-ZäöüÄÖÜ]+$/;
console.log(r.test('Foo')); //true
console.log(r.test('Foo123')); //false
console.log(r.test('foo,')); //false
console.log(r.test('foo, ')); //false
console.log(r.test('foo ')); //false
另外,请确保捕捉到keyup
事件,因为keypress
在文本框中的文本更新之前触发,因此您总是在验证后面的一个字符
所以在你的正则表达式上:
/^[a-zA-ZäöüÄÖÜ]/;
测试
Foo123
时会消耗F
,就是这样。完成了 感谢您的快速回复,但是当我使用此选项时,只要输入一个字符,字符串就不会生效。验证似乎只在输入第二个字符时启动。对不起,我在刷新浏览器之前就发表了评论。没有注意到你编辑的答案。您发布的第二个正则表达式现在可以处理我的第一个注释问题,但是当我按以下顺序输入时:input 1(无效),[backspace]input a(仍然无效,但现在应该改为valid)。为什么?您要输入的确切字符串是什么。你的正则表达式只接受字母。没有数字或退格。我对**退格的意思是键盘上的动作退格。我详细说明了我的操作:我在字段中输入了“1”,出现了红色的验证通知(这是正确的),现在我删除了“1”,然后替换为“a”,红色通知仍然在那里。除非我在字段中输入第二个字符,否则它将被清除。@D-Lo-您想捕捉keyup事件。否则,您的正则表达式将不会使用最新的文本框值进行测试:感谢您的快速回复,但是当我使用它时,每当我只输入一个字符时,字符串将不会验证。验证似乎只在输入第二个字符时启动。对不起,我在刷新浏览器之前就发表了评论。没有注意到你编辑的答案。您发布的第二个正则表达式现在可以处理我的第一个注释问题,但是当我按以下顺序输入时:input 1(无效),[backspace]input a(仍然无效,但现在应该改为valid)。为什么?您要输入的确切字符串是什么。你的正则表达式只接受字母。没有数字或退格。我对**退格的意思是键盘上的动作退格。我详细说明了我的操作:我在字段中输入了“1”,出现了红色的验证通知(这是正确的),现在我删除了“1”,然后替换为“a”,红色通知仍然在那里。除非我在字段中输入第二个字符,否则它将被清除。@D-Lo-您想捕捉keyup事件。否则,您的正则表达式将不会使用最新的文本框值进行测试: