在规则表单中使用带有正则表达式的vuelidate

svmlkihl  于 2023-03-24  发布在  Vue.js
关注(0)|答案(2)|浏览(313)

我试图在Vuelidate中创建一个正则表达式,并将其添加到一个具有多个规则的表单中。文档没有确切说明如何使用一些自定义规则,我正在使用Composition API。
我有一个需要用正则表达式验证的字段。
'^([A-ZÑ\x26]{3,4}([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))((-)?([A-Z\d]{3}))?$'
该字段位于表单中,因此我创建了稍后使用的规则,如下所示。
// const rfc = helpers.regex('^([A-ZÑ\x26]{3,4}([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))((-)?([A-Z\d]{3}))?$')
我以这种方式创建规则

`const companyRules = {
  company: {
    RFC: { required, rfc },
    name: { required },
    line: { required },
    email: { required, email },
    phone: { required },
  },
  ...
};`

最后我用它们来做表格
const v$ = useVuelidate(rules, form);
但它不起作用,因为它标记我永远是无效的。我尝试了其他更简单的正则表达式,但它仍然不起作用。我应该如何添加规则或我应该修改它?

ebdffaop

ebdffaop1#

我在使用regex helper时也遇到了同样的问题。即使是使用简单的正则表达式。我使用了composition API + vue3和几个装饰器进行翻译。

// validators.ts
export const foo = withI18nMessage(
    helpers.regex("foo", /[a-z]*/)
);

// myform.vue
import { foo } from "validators"
const validators = {
    bar: {
        foo,
    }
}

即使值有效,Bar也将保持无效......现在我决定不使用regex助手,而是使用string.match

export const sshPublicKey = withI18nMessage((value: string) =>
    Boolean(value.match(/[a-z]*/))
);
f4t66c6m

f4t66c6m2#

const companyRules = {
  company: {
    RFC: { required, rfc: helpers.regex('^([A-ZÑ\x26]{3,4}([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))((-)?([A-Z\d]{3}))?$') },
    name: { required },
    line: { required },
    email: { required, email },
    phone: { required },
  },
  ...
};

const v$ = useVuelidate(companyRules, form);

相关问题