【问题标题】:How implement regex for a textfield to allow one comma one dot at a time in Extjs如何为文本字段实现正则表达式以在 Extjs 中一次允许一个逗号一个点
【发布时间】:2019-08-06 16:35:05
【问题描述】:

我正在处理一个文本字段,以使其在任何情况下都只允许最大一个逗号和一个点(最大)的数字。它可以接受像“9.8,8.6”这样的值。它不应一次允许两个或多个点或逗号。

我尝试了下面的代码,但它不起作用。

this.regex = new RegExp('[\d,]\.?[\d,]*$');

【问题讨论】:

    标签: regex extjs extjs6.5


    【解决方案1】:

    您当前的模式有很多可选部分。例如,它还允许使用单个逗号。

    如果最大值只有 1 个逗号和逗号前后每个数字 1 个点,您可以将其设为可选:

    ^(?:\d+(?:\.\d+)?|\.\d+)(?:,(?:\d+(?:\.\d+)?|\.\d+))*$
    
    • ^ 字符串开始
    • \d+ 匹配 1+ 位
    • (?:\.\d+)* 匹配 0+ 次一个点和 1+ 个数字
    • (?:非捕获组
      • ,\d+(?:\.\d+) 匹配逗号、1+ 位数字和可选的点和 1+ 位数字
    • )? 关闭群组并将其设为可选
    • $ 字符串结束

    Regex demo

    您的代码可能看起来像(注意双重转义反斜杠)

    this.regex = new RegExp('^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:,(?:\\d+(?:\\.\\d+)?|\\.\\d+))*$');
    

    let regex = new RegExp('^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:,(?:\\d+(?:\\.\\d+)?|\\.\\d+))*$');
    
    [
      "9.8,8.6",
      "9.8",
      "8.2,9",
      "5,9",
      "9.8,8.6,1.1",
      "1,8.6",
      "9.8,8.6,1.1",
      "8,8,8",
      "9.8,8,8",
      "1,1",
      "1,1,.1,1",
    ].forEach(s => {
      console.log(s + " ==> " + regex.test(s));
    });

    【讨论】:

    • 感谢您的快速回复,我是否需要像这样使用它“this.regex = new RegExp('^\d+(?:\.\d+)(?:,\d+(? :\.\d+))?$');"
    • @SunilBamal 我添加了一个示例,说明您如何使用它。您还必须对反斜杠进行双重转义。
    • @SunilBamal 我已经更新了示例,当您使用 * 而不是 ? 时它会更新
    • 感谢@The,它对值“8.2,9”失败,但对所有十进制值都适用,它也可以是没有小数的数字,请建议,甚至对“5,9”也失败
    • 感谢@The this.regex = regex = new RegExp('^(?:\\d+(?:\\d+)?|\\d+)(?: ?, ?(?: \\d+(?:\\d+)?|\\d+))*$');这对我有用,你很棒..
    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多