Regex-允许数字0-9、Backcapce和1点Javascript
Regex - Allow Numbers 0-9, Backsapce and 1 dot Javascript
我有一个作用于keydown事件的函数,我希望它只允许数字、退格和1个点。我做不到。以下是我尝试过的:
$('#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;
}
});
它仍然防止点,但允许数字。我认为我的Regex是错误的,需要调整一下。
评论已经消失,但一些用户认为这可能与.
和,
的转义有关??有什么想法吗?
使用keypress
代替keydown
事件。为keydown
事件的某些密钥发送了不同的charcode。点就是其中之一,发送代码190
而不是ASCII 46
。你可以在这里玩。
您可以使用它而不是使用regex。我想这会帮助你
<!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>
我的答案来得有点晚,但我已经将您的代码更改为适用于您的代码:
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;
}
});
你试过这样的东西吗?当然,这并不完美,但你可以把它作为一个起点:
var whitelist = /^'d+'.?'d+?['b]?$/;
function testInput() {
var val = document.getElementById('val').value;
var res = document.getElementById('res');
if(whitelist.test(val)) {
res.innerText = 'YEP';
} else {
res.innerText = 'NOOPE';
}
}
<input onchange="testInput()" type="text" id="val"/>
<h1 id="res"></h1>
这就是我最终想到的。一本小手册,但能起作用!
$('#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;
}
});
参加派对有点晚,但这样可以。
编辑:在你否决之前点击运行代码狙击
var onlySome = restrictKeys([8,190]) // allow the dot
// decorate the jquery function with some functional goodness
$('input[type="text"]').keydown(onlySome(function(e) {
stackLog(['key alowed', e.which, String.fromCharCode(e.which)]);
}));
// functional function to partially apply restricted keys and callback functiion
function restrictKeys(keys) {
return function(fn) {
return function(e) {
// all codes between 48 and 57 are number and cool to leave in, then just filter out our array
if ((e.which < 48 || e.which > 57) && keys.indexOf(e.which) < 0) {
stackLog(['nope', e.which, String.fromCharCode(e.which)]);
e.preventDefault();
return false
}
return fn.call(this, e);
}
}
}
function stackLog(log) {
var _console = document.querySelector('#console');
_console.innerHTML = JSON.stringify(log) + ''n' + _console.innerHTML;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" placeholder="enter text here">
<pre id="console"></pre>
相关文章:
- 分派点击事件并保留击键修饰符
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- jquery点击函数select&取消选择
- ExtJS 5用程序点击actioncolumn gridview
- 我可以获得相对于被点击元素的确切点击位置吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 对iPad上的点击事件反应缓慢
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 我应该使用Ng提交还是点击表格
- 手风琴可点击并悬停
- 用与线条相同的颜色填充多折线图上的点
- python-selenium-点击上升链接
- Javascript html每点击一次就会更改url
- 当我点击jsf中的primefaces命令按钮时,如何获得点击事件
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 点击按钮输入不起作用
- 锚点元素的href属性自动更改
- 锚点元素不't使用svg时,请打开EDGE上的href
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- Regex-允许数字0-9、Backcapce和1点Javascript