我找不到用于验证URL的选项。
实现它或将其添加到vee-validate 3.0的最佳方法是什么?
我想我必须扩展当前的vee-validate:
import { ValidationObserver, ValidationProvider, localize, extend as VeeExtend } from 'vee-validate/dist/vee-validate.full';
然后类似
const urlFixRule = (value) => {
var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
'(\\#[-a-z\\d_]*)?$','i'); // fragment locator
return !!pattern.test(value);
};
VeeExtend('url', {
validate: (val) => urlFixRule(val),
message: i18n.t('custom_vee_validate.incorrect_url')
});
答案 0 :(得分:0)
Vee验证具有 regex 规则,因为您知道大多数验证都是由定期到期创建的。因此您可以轻松创建所需的规则而无需扩展。
URL验证示例:
<ValidationProvider :rules="{ regex: /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ }" v-slot="{ errors }">
<input type="text" v-model="value">
<span>{{ errors[0] }}</span>
</ValidationProvider>
答案 1 :(得分:0)
@mojtaba的答案完全正确。因此,我们可以在添加全球可用规则方面改进他的答案。这将允许在我们应用程序中的任何地方重复使用规则
import { extend } from "vee-validate";
extend('url', {
validate(value: string | null | undefined): boolean {
if (value) {
return /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(value);
}
return false;
},
message: 'This value must be a valid URL',
})
然后在我们的组件中,我们可以简单地做到:
<input rules="url"/>