Javascript 允许在输入字段中插入逗号和点

Javascript 允许在输入字段中插入逗号和点,javascript,jquery,Javascript,Jquery,我做的输入只接受数字、点和逗号;但由于某些原因,我无法使输入接受逗号和句点 当前不起作用的代码: $('.numberType').keypress(function(key) { if (key.charCode == 188 || key.charCode == 190) return true; if (key.charCode < 48 || key.charCode > 57) return false; }) $('.numberType')。按

我做的输入只接受数字、点和逗号;但由于某些原因,我无法使输入接受逗号和句点

当前不起作用的代码:

$('.numberType').keypress(function(key) {
    if (key.charCode == 188 || key.charCode == 190) return true;
    if (key.charCode <   48 || key.charCode >   57) return false;
})
$('.numberType')。按键(功能(键){
if(key.charCode==188 | | key.charCode==190)返回true;
如果(key.charCode<48 | | key.charCode>57)返回false;
})

您对逗号和句点使用了错误的字符代码。您可以通过添加
console.log
语句并查看哪些字符代码属于哪些键来测试这一点

$('.numberType')。按键(功能(键){
console.log(key.charCode);
if(key.charCode==44 | | key.charCode==46)返回true;
如果(key.charCode<48 | | key.charCode>57)返回false;
})

您对逗号和句点使用了错误的字符代码。您可以通过添加
console.log
语句并查看哪些字符代码属于哪些键来测试这一点

$('.numberType')。按键(功能(键){
console.log(key.charCode);
if(key.charCode==44 | | key.charCode==46)返回true;
如果(key.charCode<48 | | key.charCode>57)返回false;
})

这通常不是一个好主意,尤其是从用户体验的角度来看

例如,如何删除字符?您必须允许backspace和del键。箭头键呢?负数呢?如果您允许使用减号,那么如果用户键入类似“327-762”的内容会怎么样

我会说,放下这个,在提交时进行验证,或者在
blur
事件中进行验证。但是,如果没有验证某些内容,请不要强制将焦点重新放在输入上,服务器也必须进行验证,无论如何,您都不能信任用户输入


如果你真的,真的想走这条路,那么正如@Adjit所说的,你需要使用代码
44
46

这通常不是一个好主意,特别是从用户体验的角度来看

例如,如何删除字符?您必须允许backspace和del键。箭头键呢?负数呢?如果您允许使用减号,那么如果用户键入类似“327-762”的内容会怎么样

我会说,放下这个,在提交时进行验证,或者在
blur
事件中进行验证。但是,如果没有验证某些内容,请不要强制将焦点重新放在输入上,服务器也必须进行验证,无论如何,您都不能信任用户输入


如果你真的真的想走这条路,那么正如@Adjit所说的,你需要使用代码
44
46

在提交表单时,在输入上使用
模式
属性来处理验证


编号:
您可以使用这里的一些模式进行验证

以下是上述示例中使用的模式:

#Commas required
#Cannot be empty
#Pass: (1,000.100), (.001)
#Fail: (1000), ()
^(?=.)(\d{1,3}(,\d{3})*)?(\.\d+)?$

在提交表单时,使用输入的
模式
属性来处理验证


编号:
您可以使用这里的一些模式进行验证

以下是上述示例中使用的模式:

#Commas required
#Cannot be empty
#Pass: (1,000.100), (.001)
#Fail: (1000), ()
^(?=.)(\d{1,3}(,\d{3})*)?(\.\d+)?$

虽然我承认这不一定是您想要的,但由于潜在的浏览器需求、样式或特定限制,这里有一个不使用JS的HTML5解决方案:

<input pattern="^[0-9,\.]*$" />

这使用正则表达式(RegEx)来指定允许的内容,并且应该在不使用JS的情况下运行native


注意,虽然HTML5规范建议模式总是锚定在开始和结束位置,而不需要
^
$
,但Chrome和Firefox都只锚定在开始位置,而不需要
^
。两者都将作为正则表达式中的锚,因此我将两者都包括在内。

虽然我承认这不一定是您想要的,但由于潜在的浏览器要求、样式或特定限制,这里有一个不使用JS的HTML5解决方案:

<input pattern="^[0-9,\.]*$" />

这使用正则表达式(RegEx)来指定允许的内容,并且应该在不使用JS的情况下运行native

注意,虽然HTML5规范建议模式总是锚定在开始和结束位置,而不需要
^
$
,但Chrome和Firefox都只锚定在开始位置,而不需要
^
。两者都将作为正则表达式中的锚,因此我将两者都包括在内