用于 url 检查的 ValidationProvider 规则

Posted

技术标签:

【中文标题】用于 url 检查的 ValidationProvider 规则【英文标题】:ValidationProvider rule for url checks 【发布时间】:2020-04-12 06:04:28 【问题描述】:

在 @vue/cli 4.0.5 应用程序中,我需要将附加 URL 检查添加到 ValidationProvider 规则。我的代码:

<ValidationProvider
    name="website"
    rules=" required : true, url: require_protocol: true "
    v-slot=" errors "
>

但是得到了这个控制台错误:

不存在这样的验证器“ required ”。

rules:

    rules="required : true, url: require_protocol: true"

错误是:

不存在这样的“必需”验证器。

哪种格式有效?

    "vee-validate": "^3.1.0",
    "vue": "^2.6.10",

修改块:

有规则:

:rules=" required : true, url: require_protocol: true "

我得到了下一个错误:

vee-validate.esm.js?7bb1:708 Uncaught (in promise) Error: No such validator 'url' exists.

我希望所有方法都必须是可访问的,就像我在导入部分中所做的那样:

...
import ValidationObserver, ValidationProvider, extend from 'vee-validate'
import * as rules from 'vee-validate/dist/rules';

Object.keys(rules).forEach(rule => 
    extend(rule, rules[rule]);
);
import localize from 'vee-validate';

怎么了?

修改块 #2:

在vue文件中

   <ValidationProvider
        name="website"
        :rules=" required : true "
        v-slot=" errors "
    >


...

import  ValidationObserver, ValidationProvider  from 'vee-validate'
import  required, email  from 'vee-validate/dist/rules' // MY php STORM shows this line in gray color as nonused elements

我仍然有错误:

vee-validate.esm.js?7bb1:708 Uncaught (in promise) Error: No such validator 'required' exists.

我发现文件 /node_modules/vee-validate/dist/rules.js 有行:

var required = 
    validate: validate$o,
    params: params$h,
    computesRequired: computesRequired
;

var testEmpty = function (value) 
    return isEmptyArray(value) || includes([false, null, undefined], value) || !String(value).trim().length;
;
var validate$p = function (value, _a) 
    var target = _a.target, values = _a.values;
    var required;
    if (values && values.length) 
        if (!Array.isArray(values) && typeof values === 'string') 
            values = [values];
        
        // eslint-disable-next-line
        required = values.some(function (val)  return val == String(target).trim(); );
    
    else 
        required = !testEmpty(target);
    
    if (!required) 
        return 
            valid: true,
            required: required
        ;
    
    return 
        valid: !testEmpty(value),
        required: required
    ;
;
...

与示例/提供的链接相比,我没有看到错误语法 我在需要声明之前声明了 ValidationObserver、ValidationProvider。 哪里出错了?

谢谢!

【问题讨论】:

您是否尝试过在导入规则的地方添加Vue.component('ValidationProvider', ValidationProvider)Vue.component('ValidationObserver', ValidationObserver),然后在实际文件中删除这些导入? 【参考方案1】:

在this example 中,他们使用竖线字符 (|) 来分隔字符串规则:

<ValidationProvider rules="required|confirmed:confirm" v-slot=" errors ">
...

但是,如果您想像现在一样传递一个对象(这可能是最好的,因为它比该示例更复杂),那么您需要绑定 rules 属性:

<ValidationProvider
  v-bind:rules=" required : true, ... "
  ...
>

<!-- Or shorthand binding syntax with : -->
:rules=" required : true, ... "

解释您当前看到的错误:

不存在这样的验证器“ required ”。

这是因为,如果不绑定 rules 属性,您传递的是原始字符串而不是对象。因此,它会将 required 解释为验证器的名称,而这显然不是有效的验证器名称。

添加

据此GitHub issue:

现在 VeeValidate 要求您自己导入规则。所以你可以>按规则导入它们:

import required, email from 'vee-validate/dist/rules';

或者您可以使用以下命令导入所有规则:

import 
 ValidationProvider,
 ValidationObserver
 from 'vee-validate/dist/vee-validate.full';

【讨论】:

谢谢!请看 MODIFIED BLOCK 如果您不打算使用所有规则,那么导入每个规则可能不是一个好主意。相反,为什么不只是 import required, confirmed, url, ...etc from 'vee-validate' 来获取您需要的规则? 我试图离开 1 行:从 'vee-validate' 导入 ValidationObserver, ValidationProvider, required, confirm, url 但出现错误:错误:不存在这样的验证器 'required'。语法错误? 很抱歉。我已经更新了我的答案。您不会从 vee-validate 导入(我在上一条评论中提到过)。 这还是不行!请看 MODIFIED BLOCK #2

以上是关于用于 url 检查的 ValidationProvider 规则的主要内容,如果未能解决你的问题,请参考以下文章

用于检查网站是不是具有搜索引擎友好 URL 的 Ruby 代码

python 用于从提供的URL下载图像的python脚本。它检查给定的URL是否是有效图像。

用于谷歌流行度的 URL 排名检查器 API

针对 URL 中的特定页面检查可访问性

已解决:源 “MySQL 5.7 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确 和 报错:`ERROR 1045 (28000

VBS:检查 IP 地址和打开 URL(但仅一次)