我试图阻止用户输入0作为第一个数字。
这是我的代码
function validate_numberonly(evt)
{
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
theEvent.preventDefault();
}
}
允许这样做的正则表达式为replace(/[^0-9]/g,'');
但输入此而不是当前的正则表达式似乎不起作用
答案 0 :(得分:2)
试试这个:
/^[1-9]\d*$/
此检查将确保第一个字符是任何数字,但“0”,后跟零或更多任何数字。
这种模式需要与您拥有的方法略有不同。您希望针对整个字段值进行测试,而不是检查key
值。如果当前按键按下了模式匹配,则会阻止相关字符被添加到值中。
只允许添加添加继续匹配模式的字符的击键。在这种情况下,模式分解为:
^
- 值的开头[1-9]
- 只有一个字符,只允许数字1到9 \d*
- 任何数字(即0到9)零或更多$
- 值的结尾<强>更新强>
既然我已经看到你如何绑定它,你应该能够进行一些更新以使其工作。首先,您需要传递验证绑定的元素。 。 。所以,在你的HTML中,改变这个:
onkeypress='validate_numberonly(event)'
。 。 。对此:
onkeypress='validate_numberonly(this, event)'
然后,在你的JS中,你需要做两个改变:1)接受新参数,2)检索输入的值并使其成为正则表达式chek的一部分:
function validate_numberonly(evt) {
. . .
if( !regex.test(key) ) {
. . .
。 。 。变成了,这个:
function validate_numberonly(el, evt) {
. . .
if( !regex.test(el.value + key) ) {
. . .
现在,除了创建与正则表达式模式匹配的值的数字值之外,代码将只有。
这也会阻止所有非数字字符。 。 。包括“退格”和“删除”(更不用说,箭头键,“主页”,“结束”等),这意味着一旦用户输入值,用户就无法再更改值,而无需使用右键 - 单击鼠标菜单(或添加其他验证以允许那些您仍希望运行的控制键值。)
使用我提供的正则表达作为onchange
事件触发的“最终值”检查确实更有意义,并提供某种错误消息,提示用户输入只有数字,没有前导“0”。
答案 1 :(得分:1)
你可以试试这个没有正则表达式也是这样的:
$('input').keypress(function(e){
if (this.value.length == 0 && e.which == 48 ){
return false;
}
});
这不允许用户输入零作为第一个数字。
<强> JSFIDDLE 强>
答案 2 :(得分:0)
您是否尝试过阅读按键ascii值并进行测试?
说,像;
//when key is pressed in the textbox$("#quantity").keypress(function (e)
{
//if the letter is not digit then display error and don't type anything
if( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57))
{
//display error message
$("#errmsg").html("Digits Only").show().fadeOut("slow");
return false;
} });
调整上面的示例以检测'0'ascii字符代码可能更容易使用正则表达式。您可以测试当前文本框的字符串长度,如果函数大于1,则退出该函数。
代码示例来自:http://roshanbh.com.np/2008/04/textbox-accept-only-numbers-digits.html
答案 3 :(得分:0)
为了记录这个工作
<input type="text" onblur="this.value=this.value.replace(/^0+/, '')">