1

我有一个正则表达式,它只允许在文本框中输入整数和浮点数。正则表达式代码:-

("^[0-9]*(?:[.][0-9]*|)$");

但是当用户在输入值的开头和结尾输入空格时会出错。我希望用户在开头和结尾允许空格作为可选,所以我如下更改了正则表达式,但它不起作用。

注意:空格可以是空格或制表符。

测试用例:用户可能输入:

"10","10.23"," 10","10 "," 10.23","10.23 "

允许使用任意数量的空格。

("^(?:\s)*[0-9]*(?:[.][0-9]*|)$")

我是正则表达式的新手,所以任何帮助将不胜感激。

谢谢你。

4

2 回答 2

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*$/;
于 2012-10-19T05:10:13.317 回答
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
于 2012-10-19T05:22:00.070 回答