验证特定格式

时间:2018-05-22 15:16:39

标签: javascript regex sapui5

我正在考虑验证应该具有以下格式的程序输入: XXXXXXXX-Y

  • X是数字
  • Y可以是数字或字母
  • -自动写入

这就是原因所在。 Input type "Number"不适用于此案例。

https://es.wikipedia.org/wiki/Rol_%C3%9Anico_Tributario

2 个答案:

答案 0 :(得分:3)

这是sap.m.MaskInput [API] 的典型用例。使用MaskInput消除了验证(在前端)的需要,因为它甚至不允许输入无效字符,这也改善了用户体验。

当然,您也可以继续使用sap.ui.model.(odata.)type.String。在这种情况下,您可以使用类型为search的{​​{1}}类型等待正则表达式。错误的输入不会传递给绑定模型。

以下是展示这两个示例的演示:

sap.ui.getCore().attachInit(() => sap.ui.require([
  "sap/ui/core/mvc/XMLView",
  "sap/ui/model/json/JSONModel"
], (XMLView, JSONModel) => XMLView.create({
  definition: `<mvc:View xmlns:mvc="sap.ui.core.mvc"
    xmlns:form="sap.ui.layout.form"
    xmlns="sap.m"
    height="100%"
    displayBlock="true"
  >
    <App>
      <Page
        class="sapUiNoContentPadding"
        title="Allowing Specific Format Only"
      >
        <MessageStrip
          class="sapUiTinyMarginTop sapUiTinyMarginBeginEnd"
          text="Allowed sequence: &lt;em>00000000-a&lt;/em>"
          showIcon="true"
          enableFormattedText="true"
        />
        <form:SimpleForm
          editable="true"
          layout="ResponsiveGridLayout"
          labelSpanM="5"
        >
          <Label text="Restricting inputs via MaskInput" />
          <MaskInput mask="99.999.999-Y">
            <rules>
              <MaskInputRule
                maskFormatSymbol="Y"
                reges="[a-zA-Z0-9]"
              />
            </rules>
          </MaskInput>
          <Label text="Validating inputs via binding type" />
          <Input id="sapMInput" value="{
            path: 'myInput>/value',
            type: 'sap.ui.model.type.String',
            constraints: {
              search: '[0-9]{8,}-[a-zA-Z]'
            }
          }" />
        </form:SimpleForm>
      </Page>
    </App>
  </mvc:View>`,
  afterInit: function() {
    const mySapMInput = this.byId("sapMInput");
    mySapMInput.setModel(new JSONModel({
      value: "",
    }), "myInput");
    sap.ui.getCore().getMessageManager().registerObject(mySapMInput, true);
  },
}).then(view => view.placeAt("content"))));
<script id="sap-ui-bootstrap"
  src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.ui.core, sap.m"
  data-sap-ui-async="true"
  data-sap-ui-theme="sap_belize"
  data-sap-ui-compatversion="edge"
  data-sap-ui-xx-waitfortheme="true"
  data-sap-ui-xx-xml-processing="sequential"
></script>
<body id="content" class="sapUiBody sapUiSizeCompact" style="height: 100%;"></body>

PS:你可能会问为什么"9"mask定义中起作用。 By default,MaskInput包含rule /[0-9]/的{​​{1}} maskFormatSymbol

答案 1 :(得分:1)

您可以使用正则表达式验证

var pattern = \[0-9]{8,}-[a-zA-Z]\;
return pattern.test('12345678-A'); //will return true

[0-9]{8,} - 前8个字符的数字
-匹配 -
[a-zA-Z] - 一个字符upppercase或小写