首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex,允许最多10位数字,后面只有一个逗号,多3个数字

Regex,允许最多10位数字,后面只有一个逗号,多3个数字
EN

Stack Overflow用户
提问于 2017-11-15 07:55:05
回答 4查看 5.2K关注 0票数 2

我正在使用一个正则表达式,它只允许逗号之前的最多10位,逗号之后的最大3位。

到目前为止,我想出了如下结论:

代码语言:javascript
运行
复制
^[1-9]{1}[0-9]{1,9}(,[0-9]{0,3})?$.

我将验证javascript中的输入。

我使用的是sap.m.input控件,用户的击键是在实时更改事件中捕获的。

以下示例被接受为用户输入:

1234567890,123 4,1 234,45 56457

输入必须以自然数开头,只有逗号才会出现。

使用上面提到的正则表达式,我可以避免第一个数字为零,但它没有考虑这个输入值- 1,23

我在应用程序中添加了以下代码:

代码语言:javascript
运行
复制
var input = oEvent.getSource().getValue();
        var isValid = false;
        var regex = /^[1-9]{1}[0-9]{1,9}(,[0-9]{0,3})?$/;
        isValid = regex.test(input);
        if (isValid == false) {
            //  oEvent.getSource().setValueState("Error");
            input = input.replace(/[^[1-9]{1}[0-9]{1,9}(,[0-9]{0,3})]/g,"");
            oEvent.getSource().setValue(input);
            return;
        }

我还希望避免输入字段中的空白条目和空格。我希望在实时更改事件中用空格替换不想要的字符。到目前为止,我无法使用上述代码替换其他字符。

请建议如何形成完美的正则表达式来处理这种情况。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-15 08:02:56

代码语言:javascript
运行
复制
^[1-9]\d{0,9}(,\d{0,3})?$
  • [1-9] -第一个数字必须是1-9
  • \d{0,9} -在第一个数字之后,可以有0-9位数。
  • ,\d{0,3} -逗号后面的3位数字
  • ()? -逗号部分是可选的

在网上试试:https://regex101.com/r/YsaXvo/1

票数 3
EN

Stack Overflow用户

发布于 2017-11-15 08:03:01

你几乎没问题,除非在昏迷前不允许一个数字,然后开始减号。

试试这个:

代码语言:javascript
运行
复制
var regex = /^-?[1-9][0-9]{0,9}(,[0-9]{0,3})?$/;
票数 0
EN

Stack Overflow用户

发布于 2017-11-15 08:07:20

如果你想接受负数,你甚至可以更进一步:

代码语言:javascript
运行
复制
^-?[1-9]\d{0,9}(,\d{0,3})?$

通过接受-在你的字符串开头。

最后但同样重要的是,我建议在检查输入的有效性之前使用trim!用户倾向于在输入的末尾甚至开头添加不必要的空间。

祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47302062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档