所以,我想将输入字段限制为仅允许数字和连字符。我对改变我的方法不感兴趣,但是想了解为什么我的正则表达式匹配数字而不是连字符。
正则表达式:
/[^0-9-]/g
jsFiddle:http://jsfiddle.net/abriggs/7G6JD/
答案 0 :(得分:2)
添加简单的控制台行将显示错误
function numbersOnly(number, allowDash) {
console.log("In numbersOnly);
// Filter non-digits/dash from input value.
if (allowDash) {
console.log("1:", number);
number = number.replace(/[^0-9\-]/g, '');
console.log(2:", number);
} else {
// Filter non-digits from input value.
number = number.replace(/\D/, '');
}
return number;
}
输入1
In numbersOnly
1: 1
2: 1
输入-
In numbersOnly
1: ½
2:
所以问题在于行String.fromCharCode(e.which)
答案 1 :(得分:2)
问题出在-
,
但是
String.fromCharCode(189)
为½
String.fromCharCode(109)
是m
您可以使用以下代码:
function numbersOnly(number, allowDash) {
// Filter non-digits/dash from input value.
console.log(number);
if (allowDash) {
number = number.replace(/[^0-9\-]/g, '');
} else {
// Filter non-digits from input value.
number = number.replace(/\D/, '');
}
return number;
}
$(function(){
// Do not allow non-numeric characters in bill zip code
$('#billZip').keydown(function(e) {
console.log(e.keyCode);
if (e.keyCode != 8 && e.keyCode != 37 && e.keyCode != 39) {
if(e.keyCode ===189||e.keyCode ===109)
if (numbersOnly(String.fromCharCode(45), true) != "")
return true;
else
return false
if (numbersOnly(String.fromCharCode(e.which), true) != "")
return true;
else return false
}
});
});
<强> Fiddle 强>
答案 2 :(得分:0)
执行此操作的唯一方法是将连字符作为字符类中的 FIRST 或 LAST 字符,例如:
[-0-9] or [0-9-]
但是,您正在使用"^"
来否定字符类中的所有内容,因此如果您只想要连字符和数字,则不应该使用插入符号。