我有一个正则表达式,只允许在文本框中输入整数和浮点数。 正则表达式代码: -
("^[0-9]*(?:[.][0-9]*|)$");
但是当用户在输入值的开头和结尾输入空格时,它会出错。我希望用户在开头和结尾都允许空格作为可选项,因此我更改了正则表达式,如下所示,但它不起作用。
注意:空格可以是空格或制表符。
测试用例:用户可能会输入:
"10","10.23"," 10","10 "," 10.23","10.23 "
允许任意数量的空格。
("^(?:\s)*[0-9]*(?:[.][0-9]*|)$")
我是正则表达式的新手,所以任何帮助都将受到高度赞赏。
谢谢。
答案 0 :(得分:1)
试试这个:
/^\s*[0-9]*(?:[.][0-9]*|)\s*$/;
您不必将一个实体包装在一个组中以重复它,并且我在末尾添加了第二个零或多个空格,这是您缺少的,以使其工作。
注意:您尚未发布用于创建RegExp对象的代码,但如果它是new RegExp(string)
,请记住转义反斜杠(通过加倍):
var r = new RegExp("^\\s*[0-9]*(?:[.][0-9]*|)\\s*$");
另外,正如@Blender建议的那样,这可以简化为:
/^\s*[0-9]*(?:\.[0-9]*)?\s*$/;
或者,使用\d
代替[0-9]
:
/^\s*\d*(?:\.\d*)?\s*$/;
答案 1 :(得分:0)
您不一定需要正则表达式:!isNaN(Number(textboxvalue.trim()))
就足够了。
否则,请尝试/^\s{0,}\d+\.{0,1}\d+\s{0,}$/
。测试:
var testvalues = ["10","10.23"," 10","10 "," 10.23","10.23 ","10.24.25"];
for (var i=0;i<testvalues.length;i+=1){
console.log(/^\s{0,}\d+\.{0,1}\d+\s{0,}$/.test(testvalues[i]));
}
//=> 6 x true, 1 x false