正则表达式只允许文本框中的单个点

我有一个文本输入。

我写了一个正则表达式来掩盖所有特殊字符,除了.- 。 现在,如果用户输错了两个. 输入中的(点),然后是当前的正则表达式

 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+)?$/