正则表达式只允许文本框中的单个点
我有一个文本输入。
我写了一个正则表达式来掩盖所有特殊字符,除了.
和-
。 现在,如果用户输错了两个.
输入中的(点),然后是当前的正则表达式
var valueTest='225..36' valueTest.match(/[^-.\d]/)
我预计这个数字不会通过这个条件
如何处理这种情况。 我只想要一个 .
(点)在输入字段中,因为它是一个数字。
我想你的意思是这个,
^-?\d+(?:\.\d+)?$
DEMO
它允许带有或不带小数点的正数和负数。
说明:
-
^
断言我们刚开始。 -
-?
可选-
符号。 -
\d+
匹配一个或多个数字。 -
(?:
非捕获组的开始。 -
\.
匹配一个文字点。 -
\d+
匹配一个或多个数字。 -
?
使整个非捕获组成为可选组。 -
$
断言我们结束了。
如果你只是想处理数字,你可以试试这个:
valueTest.match(/^-?\d+(\.\d+)?$/)
在这种情况下,你可以完全避免使用正则表达式。
例如
String[] input = { "225.36", "225..36","-225.36", "-225..36" }; for (String s : input) { try { Double d = Double.parseDouble(s); System.out.printf("\"%s\" is a number.%n", s); } catch (NumberFormatException nfe) { System.out.printf("\"%s\" is not a valid number.%n", s); } }
产量
"225.36" is a number. "225..36" is not a valid number. "-225.36" is a number. "-225..36" is not a valid number.
使用以下注册表符合您的要求。
/^\d+(.\d+)?$/