我正在创建一个需要验证用户输入的程序。
用户应该能够写浮点数和一些字母,如'k'代表千或'm'代表百万。允许有:数字,列表中只有一个字母(g,k,m,n,u)和只有一个'。'表示十进制数。如果用户输入不同的符号,则列表中的两个字母,两个点,后面跟着另一个符号-文本框中不显示任何内容。
到目前为止,我所做的根本不起作用。我甚至不能列出允许使用的符号。我该如何解决这个问题?我几乎看过网上所有关于regexp的页面。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-9GMkmpu.]
,所以你将能够检测到字符串中的任何错误字符。
使用正则表达式,您可以这样写:aaaaaaaaaaakhhhhhhhhh将返回yes.
从您提供的代码来看,看起来您是在一次测试一个字符的字符串。您需要的代码只验证输入的字母是否正确,但从整体上看,由按键创建的最终字符串可能不是您期望的格式。
例如,字符串123.123.321.m
都是有效的字符,但最后的字符串是无效的。
基本上,您需要添加验证来检查最终输入的字符串。
像这样的regexp可以帮助您验证最终的字符串输入。
numcheck = /^[0-9]*.?[0-9]+[gkmnu]?$/
这个正则表达式表示
- 可选匹配0-9
- next,可选地匹配点
- 下一步,匹配至少一个数字
- 字符串的结尾可以是集合 中的一个字符。
/^[0-9]*[.]*[0-9]*[Mkmpu]*$/
这个非常灵活,可以处理诸如"。57米"57" 57米"57米"57。米"57.57米"。
可以了
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);
}
}