逗号后限制字符串为2个数字,只有一个逗号

时间:2014-03-21 23:07:33

标签: javascript regex

我在下面有这个脚本,只允许输入文本上的数字和逗号。

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)

2 个答案:

答案 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)'>

Demonstration

如果您还想确保用户在逗号后输入2位数字,则在使用如下模式提交表单之前,您必须对最终值进行第二次验证:

/^\d+,\d{2}$/

这将匹配由数字序列组成的任何字符串,后跟逗号,后跟恰好两位数字。开始(^)和停止($)锚定确保在匹配的字符串之前或之后不允许其他字符。

答案 1 :(得分:0)

使用正则表达式替换,如下所示:

var x = "123,456,7890";
var a = x.replace(/(,[0-9]{2})([0-9,]*)/, "$1");