2014-01-26 40 views
0

以下是我的JavaScript代码,它只接受数字和点(。)。但是,如果我写123 ..... 122这仍然是接受。基本上我是这样做的价格字段验证用户只能写这种格式。正则表达式匹配正确的价格值

欲望格式:

$(currency)12345(amount).(dot only once)123(decimal) 

JavaScript代码:

<script type="text/javascript"> 
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(); 
    } 
} 
</script> 

HTML输入字段:

<input type='text' onkeypress='validate(event)' /> 

何我可以修复这个JavaScript代码吗?
谢谢。

+0

让您随心所欲地匹配,例如,'$ 845.47'? – Markasoftware

+0

@Markasoftware是的,这是我的货币格式。 – Babu

+0

你只是在测试他们按下的键。您需要测试整个输入 – Markasoftware

回答

0

你的代码存在两个问题:你只测试按键,而不是输入值,而正则表达式有点搞砸。以下是如何解决这个问题:

的JavaScript:

function validate(toValidate){ 
    if(!/^\$\d+(\.\d{0,2})?$/.test(toValidate)) 
     alert('NOOOOO');//or do something else here 
} 

HTML输入:

<input type='text' oninput='validate(this.value)' /> 

jsfiddle

+0

它不接受$(美元),输入数字时显示“Nooo”。 – Babu

+0

@Babu每当你输入一个键时,它会根据正则表达式对它进行测试。如果不匹配,则显示警报。输入$,点击确定,然后输入5(现在应该说5美元),并且没有警报,这意味着它已通过。我会编辑小提琴,使其更可用 – Markasoftware

+0

感谢您的努力。你测试了我上传的脚本吗?您只能输入“Number”值。你不能输入任何字母字符。所以这个JavaScript验证应该是有效的,而用户输入匹配我的格式字符串... – Babu