Javascript jQuery正则表达式可以匹配数字,但不能匹配连字符
所以,我想限制输入字段只允许数字和连字符。我不想改变我的方法,但想了解为什么我的正则表达式匹配数字而不是连字符 正则表达式:Javascript jQuery正则表达式可以匹配数字,但不能匹配连字符,javascript,jquery,regex,Javascript,Jquery,Regex,所以,我想限制输入字段只允许数字和连字符。我不想改变我的方法,但想了解为什么我的正则表达式匹配数字而不是连字符 正则表达式: /[^0-9-]/g jsIDLE:唯一的方法是将连字符作为字符类中的第一个或最后一个字符,例如: [-0-9] or [0-9-] 但是,您使用的是否定字符类中所有内容的“^”,因此如果您只需要连字符和数字,则不应使用插入符号 来源:唯一的方法是将连字符作为字符类中的第一个或最后一个字符,如下所示: [-0-9] or [0-9-] 但是,您使用的是否定字符类中所
/[^0-9-]/g
jsIDLE:唯一的方法是将连字符作为字符类中的第一个或最后一个字符,例如:
[-0-9] or [0-9-]
但是,您使用的是否定字符类中所有内容的“^”
,因此如果您只需要连字符和数字,则不应使用插入符号
来源:唯一的方法是将连字符作为字符类中的第一个或最后一个字符,如下所示:
[-0-9] or [0-9-]
但是,您使用的是否定字符类中所有内容的“^”
,因此如果您只需要连字符和数字,则不应使用插入符号
来源:添加简单控制台行将显示错误
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:
因此,您的问题在于行
字符串。从charcode(e.which)
添加简单控制台行将显示错误
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:
因此,您的问题在于行
字符串。fromCharCode(e.which)
的问题在于-
的keycode
但是
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
}
});
});
问题在于
-
的键代码
但是
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
}
});
});
请避开连字符。可能是/[^0-9\-]/g@Ethan最后一个连字符不需要转义。+1,因为这是一个好问题。以后,请尝试给出有问题的描述性代码。@SujithPS可以,谢谢。请转义连字符。可能是/[^0-9\-]/g@Ethan最后一个连字符不需要转义。+1,因为这是一个好问题。以后,尝试给出有问题的描述性代码。@SujithPS可以,谢谢。修复了添加两个选项的问题。代码可能有问题,但正则表达式本身会测试出来。正则表达式单独使用可能没问题,但如果它不能解决OP的问题,那么它就不是一个真正有效的答案。您的解决方案不应该只是指出问题的一部分,它应该完全回答问题的所有部分,并考虑到提供的完整代码。已经有一个可接受的答案,所以此时不需要。小提琴显示他们需要添加更多的键码。修复了添加两个选项的问题。您的代码可能有问题,但正则表达式本身进行了测试。正则表达式单独使用可能没问题,但如果它不能解决OP的问题,那么它就不是一个真正有效的答案。您的解决方案不应该只是指出问题的一部分,它应该完全回答问题的所有部分,并考虑到提供的完整代码。已经有一个可接受的答案,所以此时不需要。小提琴显示他们需要添加更多的键码。谢谢,接受你的答案,因为它提供了一个完整的解决方案。谢谢,接受你的答案,因为它提供了一个完整的解决方案。谢谢,你是对的+1,但接受了Sujith PS的回答,因为他提供了完整的解决方案。谢谢,你说得对+1,但接受了Sujith PS的回答,因为他提供了完整的解决方案。