正则表达式-允许数字0-9、反循环和1点Javascript
我有一个作用于按键事件的函数,我希望它只允许数字、退格和1点。我做不到。以下是我尝试过的:正则表达式-允许数字0-9、反循环和1点Javascript,javascript,regex,Javascript,Regex,我有一个作用于按键事件的函数,我希望它只允许数字、退格和1点。我做不到。以下是我尝试过的: $('#input[type="number"]').keydown(function(e) { this.value = this.value.toLowerCase(); var regex = new RegExp("^[0-9.,\b]+$"); var key = String.fromCharCode(!e.charCo
$('#input[type="number"]').keydown(function(e) {
this.value = this.value.toLowerCase();
var regex = new RegExp("^[0-9.,\b]+$");
var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (!regex.test(key)) {
console.log('stop now')
e.preventDefault();
return false;
}
});
它仍然阻止点,但允许数字。我认为我的正则表达式是错误的,需要调整
注释不见了,但一些用户建议这可能与转义
和,
有关??有什么想法吗?使用keypress
插入keydown
事件。为keydown
事件的某些键发送了不同的字符码。点就是其中之一,它发送代码190
,而不是ASCII46
。你可以玩玩它。晚会有点晚了,但这样行得通
编辑:在下一票之前单击RunCodeSnippit
var onlySome=restrictKeys([8190])//允许点
//用一些函数的优点来修饰jquery函数
$('input[type=“text”]”)。向下键(仅部分(函数(e)){
stackLog(['key alow',e.which,String.fromCharCode(e.which)]);
}));
//部分应用受限键和回调函数的函数
功能限制键(键){
返回函数(fn){
返回函数(e){
//所有48到57之间的代码都是数字,很酷可以输入,然后过滤掉我们的数组
if((e.which<48 | | e.which>57)和&keys.indexOf(e.which)<0){
stackLog(['nope',e.which,String.fromCharCode(e.which)]);
e、 预防默认值();
返回错误
}
返回fn.call(this,e);
}
}
}
函数堆栈日志(日志){
var#u console=document.querySelector('#console');
_console.innerHTML=JSON.stringify(log)+'\n'+\u console.innerHTML;
}
你有没有试过这样的方法? 当然,这并不完美,但您可以将其作为起点:
var白名单=/^\d+\.?\d+?[\b]?$/;
函数testInput(){
var val=document.getElementById('val').value;
var res=document.getElementById('res');
if(白名单测试(val)){
res.innerText='是';
}否则{
res.innerText='NOOPE';
}
}
我的答案来得有点晚,但在这里,我已将您的代码更改为适合您的代码:
var valid_value = '';
$('#input[type="number"]').keyup(function(e) {
var regex = new RegExp(/^[0-9]*\.?[0-9]*$/);
if (!regex.test(this.value)) {
this.value = valid_value;
console.log('stop now');
} else {
valid_value = this.value;
}
});
您可以使用它而不是使用正则表达式。我想这对你有帮助
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" language="jscript">
function fncInputNumericValuesOnly() {
if (!(event.keyCode == 32 || event.keyCode == 46 || event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50 || event.keyCode == 51 || event.keyCode == 52 || event.keyCode == 53 || event.keyCode == 54 || event.keyCode == 55 || event.keyCode == 56 || event.keyCode == 57))
{
event.returnValue = false;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtEmpName" onkeypress="fncInputNumericValuesOnly()" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>
函数fncInputNumericValuesOnly(){
如果(!(event.keyCode==32 | event.keyCode==46 | event.keyCode==48 | event.keyCode==49 | event.keyCode==50 | event.keyCode==51 | event.keyCode==52 | event.keyCode==53 | event.keyCode==54 | event.keyCode==55 | event.keyCode==57))
{
event.returnValue=false;
}
}
这就是我最后想到的。一个小手册,但做的把戏
$('#input[type="number"]').keydown(function(e) {
if (!(e.keyCode == 190 || e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 13 || e.keyCode == 32 || e.keyCode == 46 || e.keyCode == 48 || e.keyCode == 49 || e.keyCode == 50 || e.keyCode == 51 || e.keyCode == 52 || e.keyCode == 53 || e.keyCode == 54 || e.keyCode == 55 || e.keyCode == 56 || e.keyCode == 57)) {
e.returnValue = false;
e.preventDefault();
return false;
}
});
在编写正则表达式时,我使用它来可视化流。如果您只需要一个点,则正则表达式中会有一个错误,因为
+
符号是一个量词,意味着介于一次和无限次之间。您可以说“希望它只允许数字”。然后你说“仍然允许数字”。是否允许使用数字?为什么在regexp中有逗号?@torazaburo-是的,我有。我的意思是,由于上述原因,我的代码允许数字通过OK。它仍然可以防止圆点通过。我想尝试做一个正则表达式,它只允许数字、退格和一个点出现。有什么想法吗?谢谢,但是在上面的上下文中,它是如何工作的呢。我会将其设置为正则表达式,并进行某种.match(白名单)
-如果您有一个可用的小提琴或示例,那就太好了。谢谢您的回答,但当我尝试在代码中使用您的正则表达式时,这对我来说并不适用。现在我只能接受数字和句点。如果这是问题所在,那么超过1就不重要了。谢谢,这条提示让我找到了我发布的答案!干杯谢谢这有帮助。