如何在Vee-validate 3.0中验证URL?

时间:2019-10-11 13:00:56

标签: vee-validate

我找不到用于验证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')
});
  • 哪种方法是验证URL的最佳方法?
  • 为什么要删除这种有用的功能?

2 个答案:

答案 0 :(得分:0)

Vee验证具有 regex 规则,因为您知道大多数验证都是由定期到期创建的。因此您可以轻松创建所需的规则而无需扩展。

Document Link

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"/>