Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式仅适用于数字(无特殊字符)_Javascript_Regex - Fatal编程技术网

Javascript正则表达式仅适用于数字(无特殊字符)

Javascript正则表达式仅适用于数字(无特殊字符),javascript,regex,Javascript,Regex,我试图找到一个只允许数字0-9而不允许特殊字符的正则表达式。这是不可能的,因为按下Shift+2仍然是一个数字 我使用了以下方法: return /[0-9]|\./.test(String.fromCharCode(event.keyCode)); 除了仍然允许的特殊字符外,其他字符都可以正常工作 任何输入都会非常有用。我认为/[0-9]/应该像你说的那样工作。它将不匹配“shift-2”,仅匹配精确的字符0、1、2、…、9。我认为你的RE的一部分是伤害你的…我认为/[0-9]/应该像你说的

我试图找到一个只允许数字0-9而不允许特殊字符的正则表达式。这是不可能的,因为按下Shift+2仍然是一个数字

我使用了以下方法:

return /[0-9]|\./.test(String.fromCharCode(event.keyCode));
除了仍然允许的特殊字符外,其他字符都可以正常工作


任何输入都会非常有用。

我认为
/[0-9]/
应该像你说的那样工作。它将不匹配“shift-2”,仅匹配精确的字符0、1、2、…、9。我认为你的RE的一部分是伤害你的…

我认为
/[0-9]/
应该像你说的那样起作用。它将不匹配“shift-2”,仅匹配精确的字符0、1、2、…、9。我认为你的RE的一部分是伤害你的…

你试过这个吗

"^[0-9]+$"

你试过这个吗

"^[0-9]+$"

我看到的一个问题是,keyCode可以是多个数字,但您的正则表达式只有一个数字后跟一个句点。也许这是:

return /\d+/.test( String.fromCharCode(event.keyCode) );

你这样做是为了什么?

我看到的一个问题是,keyCode可以是多个数字,但你的正则表达式只有一个数字后跟一个句点。也许这是:

return /\d+/.test( String.fromCharCode(event.keyCode) );

你这样做是为了什么?

我认为你的方向是对的。只需添加
!事件.移位键

return /[0-9]|\./.test(String.fromCharCode(event.keyCode)) && !event.shiftKey;
如果需要,还有
altKey
ctrlKey

对于来自数字键盘的
keyCode
s,您需要与数字
keyCode
进行比较,而不是使用正则表达式:

return (/[0-9]|\./.test(String.fromCharCode(event.keyCode)) && !event.shiftKey) 
    || (event.keyCode >= 96 && event.keyCode <= 105);
返回(/[0-9]\./.test(String.fromCharCode(event.keyCode))&&!event.shiftKey)

||(event.keyCode>=96&&event.keyCode=48&&event.keyCode=96&&event.keyCode我认为您的思路正确。只需添加
!event.shiftKey

return /[0-9]|\./.test(String.fromCharCode(event.keyCode)) && !event.shiftKey;
如果需要,还有
altKey
ctrlKey

对于来自数字键盘的
keyCode
s,您需要与数字
keyCode
进行比较,而不是使用正则表达式:

return (/[0-9]|\./.test(String.fromCharCode(event.keyCode)) && !event.shiftKey) 
    || (event.keyCode >= 96 && event.keyCode <= 105);
返回(/[0-9]\./.test(String.fromCharCode(event.keyCode))&&!event.shiftKey)


|| (event.keyCode>=96&&event.keyCode=48&&event.keyCode=96&&event.keyCode=96&&event.keyCode之后为什么不验证该字段?只需检查该值,如果它不是数字,则中断验证?只需检查
+input====input
-如果它不是一个数字,则
NaN==NaN
为假。@Rafael.it我更愿意预先验证。)如果不是数字,请释放按键。@Stefan是的,我的意思是,既然我按下了2位数的键,它是否仍然将其解释为数字,因为它允许我使用正则表达式键入它?使用
onkeypress
而不是
onkeypup/down
。它将为您提供正确的按键命中值。之后为什么不验证该字段?只需检查一下如果它不是一个数字,请检查是否
+input=====+input
-如果它不是一个数字,那么
NaN===NaN
是假的。@Rafael。如果它不是一个数字,我宁愿阻止按键。@stefan是的,我的意思是,既然我按下了两位数的键,它是否仍然将它解释为一个数字因为它允许我用正则表达式键入它?使用
onkeypress
而不是
onkeypup/down
。它会给你正确的击键值。我去掉了末端,它仍然有相同的结果。允许特殊字符。好吧,听起来像个死胡同。不过,我会说,它与keypress有关处理,而不是严格意义上的RE问题。无论哪种方式……都没有帮助。:)我去掉了尾端,结果仍然一样。允许使用特殊字符。好吧,听起来像是一条死胡同。不过,我会说,这是一个与按键操作有关的令人生厌的东西,严格来说,这不是RE的问题。无论哪种方式……都没有帮助。:)这是一个ZipCode文本框,我被要求只允许数字作为输入。@mint,所以你试图在每次按键时进行验证?你可能想等到onBlur出现后再测试整个字段。然后它就不用event.keyCode了,因为它在跨浏览器中可能会变得毛茸茸的。此外,由于zip格式非常好,我建议使用以下正则表达式:
/^\d\d\d\d\d(?:-?\d\d\d\d)$/
这是5位数字,后跟一个可选破折号和四个可选的额外数字。对于ZipCode文本框,我被要求只允许数字作为输入。@mint,所以您试图在每次按键时进行验证?您可能希望等到onBlur出现后,再测试整个字段。然后,它不会使用event.keyCode,因为它可能会在交叉浏览时变得毛茸茸的此外,由于zip格式非常好,我建议使用以下正则表达式:
/^\d\d\d\d(?:-?\d\d\d\d)$/
这是5位数字,后跟一个可选破折号和四个可选的额外数字。添加event.shiftKey有帮助,但如果我在数字键盘上键入数字,它不会让任何内容通过。这是否返回到我的正则表达式不正确?使用@Diego的建议,同时更改为
onkeypress
,而不是
onkeypup
(正如@Teemu所建议的那样),现在可以了。谢谢你的帮助。我认为你的正则表达式很好(虽然它也允许一个句号',但我认为这是你想要的)。我编辑了我的答案,以包括数字键盘案例。添加event.shiftKey checked有帮助,但如果我在数字键盘上键入数字,它不会让任何内容通过。这是否返回到我的正则表达式不正确?使用@Diego的建议,同时更改为
onkeypress
,而不是
onkeypup
(由@Teemu建议),现在可以了。谢谢你的帮助。我认为你的正则表达式很好(虽然它也允许句点“.”,但我认为这正是你想要的。我编辑了我的答案,将数字键盘的大小写包括在内。