2011-07-07 79 views
0

我正在创建一个程序,我需要验证用户输入。JavaScript用户的输入验证

用户应该能够写出浮点数字和一些字母,例如'k'为千位或'm'为百万位。允许的是:数字,并且列表中只有一个字母(g,k,m,n,u),只有一个'。'为十进制数字。如果用户放置不同的符号,则列表中的两个字母,两个点,以另一个符号跟随字母 - 文本框中不显示任何内容。

我到目前为止所做的一切都没有工作。我甚至不能用允许的标志创建一个列表。我该如何解决这个问题?我见过的几乎每一页关于正则表达式在网络上..

function signFilter(e) 
{ 
    var keynum; 
    var keychar; 
    var numcheck; 

    if(window.event) // IE 
    { 
     keynum = e.keyCode; 
    } 
    else if(e.which) // Netscape/Firefox/Opera 
    { 
     keynum = e.which; 
    } 
    keychar = String.fromCharCode(keynum); 
    numcheck = /[0-9GMkmpu.]/; 
    return numcheck.test(keychar); 
} 

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onkeydown 这里是输入的示例代码。没有我尝试给出合理的结果。 (当然,我从回报中删除'!')。

+0

不是很多好来自http://w3fools.com/ – mplungjan

+0

什么指数符号?即'1。0E-23' – ridgerunner

回答

0

您的正则表达式只是将其中一个字符存在于[]中。你试图做的是测试字符串中是否存在其他字符。

我建议你有一个^这样的符号:[^0-9GMkmpu.],所以你将能够检测到字符串中的任何错误字符。

随着正则表达式你写了类似:aaaaaaaaaahhhhhhhhh将返回是。

0

从您提供的代码看来,您一次只能测试一个字符。 您必须验证输入的代码是否正确才能输入正确的字母,但总体而言,从按键创建的最终字符串可能不是您期望的格式。

例如,字符串123.123.321.m都是有效的字符,但最终的字符串无效。

基本上,你需要添加验证,检查输入的最终字符串。

像这样的正则表达式可以帮助您验证最终的字符串输入。

numcheck = /^[0-9]*\.?[0-9]+[gkmnu]?$/ 

该正则表达式表示

  1. 任选匹配0-9
  2. 下,任选地匹配一个点
  3. 下,匹配的至少一个数
  4. 所述字符串的末尾可以结束在集合中的一个字符中
+0

但我需要验证它与每个按键,不仅在最后。 – Piotrek

+0

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onkeydown – Piotrek

+0

我试图改变这个正则表达式,并至少创建一个允许的字符列表(当然删除比'!'退回),但我总是得到不合理的结果 – Piotrek

0
/^[0-9]*[\.]*[0-9]*[Mkmpu]*$/ 

这个很灵活,处理诸如“.57m”“57”“57m”“57.m”“57.57m”的sereval情况。

0

这工作

http://jsfiddle.net/mplungjan/KvJQx/

window.onload=function() { 
    document.getElementById("t1").onkeypress=function(e) { 
    var keyNum = (window.event)?window.event.keyCode:e.which; 
    var keyChar = String.fromCharCode(keyNum); 
    return /[0-9GMkmpu\.]/.test(keyChar); 
    } 
}