我想知道这里的问题是什么。
$("#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');
}
}
});
每当我输入字母时它是有效的,那么当我输入数字时,会出现红色验证通知。此时一切都很好,直到我在信件后输入数字。以下内容应无效,但在我当前的脚本中,它被视为有效:
我真正想验证的是,只接受字母和短划线( - ),除此之外别无其他。
感谢。
修改
为了记录,@ Adam Rackis的最后评论解决了这个问题,我最终得到了这个有效的代码。
$(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');
}
});
});
答案 0 :(得分:4)
你的正则表达式只匹配一个字符。您需要将该输入放在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
ALSO ,请确保您抓住keyup
事件,因为keypress
在文本框中的文字更新之前触发了,所以你是总是验证背后的一个角色。
所以你的正则表达式:
/^[a-zA-ZäöüÄÖÜ]/;
在测试Foo123
时会消耗F
,就是这样。完成。