如何通过单个正则表达式实现Vuetify表单文本框的双格式验证?
当然可以用单个正则表达式覆盖这两种验证场景!
我来帮你实现这个需求,先拆解一下你的两种格式要求,再整合出合适的正则,最后嵌入到Vuetify的表单规则里。
正则表达式设计思路
你需要匹配的两种格式可以通过逻辑或合并到一个正则中,同时用锚点确保输入内容完全符合规则(避免部分匹配的情况):
^(?:[A-Za-z]{2}-\d{8}|\d{1,8})$
逐个解释一下这个正则的组成:
^和$:强制匹配整个输入字符串,避免出现类似AB-12345678abc这种不符合规则的内容[A-Za-z]{2}-\d{8}:匹配「两位大小写字母 + 连字符 + 8位数字」的格式(如果只需要大写字母,把[A-Za-z]改成[A-Z]即可)\d{1,8}:匹配「1到8位的纯数字」(满足你说的“最多8位”的要求)(?:...):非捕获组,用来包裹两个分支,避免生成不必要的捕获分组|:逻辑或,只要输入满足两种格式中的任意一种就算验证通过
修改后的Vuetify表单代码
把这个正则加到你的v-text-field的rules数组里,替换原来的规则部分即可:
<v-form ref="sidebarSearchForm" lazy-validation v-on:submit.prevent> @Html.AntiForgeryToken() <v-text-field label="Search" single-line filled rounded dense append-icon="mdi-magnify" v-model="id" :rules="[ v => !!v || 'ID Required!', v => /^(?:[A-Za-z]{2}-\d{8}|\d{1,8})$/.test(v) || 'ID格式不正确!请输入类似AB-12345678的格式,或1-8位纯数字' ]" @click:append="searchID" v-bind="{error: !validationProp,...(!validationProp && { 'error-messages': ['ID not found!'] })}" ></v-text-field> </v-form>
额外说明
- 如果你的业务要求前缀只能是大写字母,把正则里的
[A-Za-z]替换成[A-Z]就行 - 因为你已经设置了必填规则,所以纯数字分支用
\d{1,8}(1到8位)就足够,不用考虑空值的情况
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

