我在下面有这个脚本,只允许输入文本上的数字和逗号。
function validate(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;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
<input type="text" name="price" onkeypress='validate(event)'>
如何修改此代码以仅允许一个逗号,逗号后只允许两个数字?我不想用jQuery来解决这个问题。
EXAMPLE:
1234,56 (stop)
1,23 (stop)
123,45 (stop)
1234567,89 (stop)
答案 0 :(得分:4)
您的验证功能仅检查当前键,但您需要检查输入元素的值。你可以使用这样的模式:
/^\d+(,\d{0,2})?$/
这将匹配由一系列数字组成的任何字符串,可选地后跟逗号和最多两位数字。
您的整个验证功能看起来有点像这样:
function validate(evt, ele) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var value = ele.value + key;
var regex = /^\d+(,\d{0,2})?$/;
if( !regex.test(value) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
<input type="text" name="price" onkeypress='validate(event, this)'>
如果您还想确保用户在逗号后输入2位数字,则在使用如下模式提交表单之前,您必须对最终值进行第二次验证:
/^\d+,\d{2}$/
这将匹配由数字序列组成的任何字符串,后跟逗号,后跟恰好两位数字。开始(^
)和停止($
)锚定确保在匹配的字符串之前或之后不允许其他字符。
答案 1 :(得分:0)
使用正则表达式替换,如下所示:
var x = "123,456,7890";
var a = x.replace(/(,[0-9]{2})([0-9,]*)/, "$1");