【问题标题】:Regex to allow only a single dot in a textbox正则表达式只允许文本框中的一个点
【发布时间】:2014-07-31 07:57:24
【问题描述】:

我有一个文本输入。

我写了一个正则表达式来屏蔽除.- 之外的所有特殊字符。现在,如果用户错误地在输入中输入了两个.(点),那么使用当前的正则表达式

var valueTest='225..36'

valueTest.match(/[^-.\d]/)

我预计号码不会通过这个条件

如何处理这种情况。我只想在输入字段中一个 .(点),因为它是一个数字。

【问题讨论】:

  • 你想允许有一个点的数字吗?
  • 你能给我们展示更多的例子吗?例如允许连字符甲酸

标签: javascript jquery regex


【解决方案1】:

我想你的意思是,

^-?\d+(?:\.\d+)?$

DEMO

它允许带或不带小数点的正数和负数。

解释:

  • ^ 断言我们处于起步阶段。
  • -? 可选- 符号。
  • \d+ 匹配一个或多个数字。
  • (?: 非捕获组的开始。
  • \. 匹配文字点。
  • \d+ 匹配一个或多个数字。
  • ? 将整个非捕获组设为可选。
  • $ 断言我们已经走到了尽头。

【讨论】:

    【解决方案2】:

    如果你只想处理数字,你可以试试这个:

    valueTest.match(/^-?\d+(\.\d+)?$/)
    

    【讨论】:

    • 对于负数 -?\d+(\.\d+)? ... 最佳:[+-]?\d+(\.\d+)?
    • @AvinashRaj :) 是的,你的回答和我之前回答的一样,哈哈~
    【解决方案3】:

    在这种情况下,您可能完全可以避免使用正则表达式。

    例如

    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.
    

    【讨论】:

    • @techfoobar 连字符在此解决方案中是允许的,只要它们在数字之前 --> 负双打。
    • 除了不是 javascript,这个答案是最好的方法。它轻巧、简单,并且利用 javascript 的松散类型可以在一行中完成。 valid = parseFloat(currentValue) == currentValue ? true : false;
    【解决方案4】:

    使用下面的 reg ex 它将满足您的要求。

    /^\d+(.\d+)?$/

    【讨论】:

    • .(dot) 应该首先在正则表达式中转义
    • 哦,是的,应该是 /^-?\d+(\.\d+)?$/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多