正则表达式允许最多10位数后跟一个逗号和3位数

时间:2017-11-15 07:55:06

标签: javascript regex input sapui5

我正在使用正则表达式,只允许逗号前最多10位数,逗号后最多3位数。

到目前为止,我已经想出了这个:

^[1-9]{1}[0-9]{1,9}(,[0-9]{0,3})?$.

我将在javascript中验证输入。

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

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

  

1234567890,123
  4,1
   234,45
  56457

输入必须始终以自然数开头,并且只能出现逗号。

使用上面提到的正则表达式,我能够避免第一个数字为零,但它不考虑此输入值- 1,23

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

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;
        }

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

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

感谢。

4 个答案:

答案 0 :(得分:3)

^[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

答案 1 :(得分:0)

你几乎没问题,除了在昏迷前不允许1个数字,并且开始减去。

试试这个:

var regex = /^-?[1-9][0-9]{0,9}(,[0-9]{0,3})?$/;

答案 2 :(得分:0)

如果你想接受负数,你甚至可以走得更远:

^-?[1-9]\d{0,9}(,\d{0,3})?$

接受字符串开头的 - 。

最后但并非最不重要的是,我建议在检查输入的有效性之前使用trim!用户倾向于在结尾处或甚至在他们输入的内容的开头添加不必要的空格。

祝你好运

答案 3 :(得分:0)

由于您正在使用SAPUI5 / OpenUI5,请查看框架已提供的内容。例如:建议您使用控件StepInput代替普通Input

  • 它只允许支持十进制值的数字。
  • 它支持minmax值。
  • 删除不需要的字符,例如空格。
  • 它替换空白条目(min值)。
  • 此外,它还支持轻松步进with keyboard and scroll wheel

以下是展示上述标准的示例。 (可选),我们还可以在控件上设置模型,并将bind数据设置为value,以便UI5仅在满足某些条件时才处理保存值。为此,我们使用具有相应约束的类型Float



sap.ui.getCore().attachInit(() => sap.ui.require([
  "sap/m/StepInput",
  "sap/ui/model/json/JSONModel",
], (StepInput, JSONModel) => new StepInput({

  // Control related
  min: 1,
  max: 9999999999.999,
  displayValuePrecision: 3,
  step: 0.1,
  width: "260px",
  
  // Save data into the model only if the value didn't violate constraints
  value: {
    path: '/data',
    type: 'sap.ui.model.type.Float',
    constraints: {
      minimum: 1,
      maximum: 9999999999.999,
    },
  },
  
  // Inform user
  validationError: e => e.getSource().setValueStateText(e.getParameter("message")),
  validationSuccess: e => e.getSource().setValueStateText(),
  
  // Log model data to see if it's updated or not when value was invalid
  change: e => console.log(e.getSource().getModel().getProperty("/data")),

}).setModel(new JSONModel({
  "data": 1.0,
})).placeAt("content")));

<script id="sap-ui-bootstrap"
  src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.m"
  data-sap-ui-theme="sap_belize"
  data-sap-ui-preload="async"
  data-sap-ui-compatVersion="edge"
  data-sap-ui-xx-waitForTheme="true"
></script>
<div id="content"></div>
&#13;
&#13;
&#13;

我们可以看到,如果值无效,模型不会保存值(例如&#34; -1.000&#34;)。