0

版本

vee验证:2.1.0-beta.2
vue:2.5.7

描述

使用了电子邮件验证,但它不考虑一些有效的电子邮件,例如:

  • admin@gmail.com

它认为:

  • admin@gmail.co
  • admin1@gmail.com
  • admin@gmail1.com
  • admin@gmail.net
  • admin@gmail.ne

这是代码片段:
[<input type="email" 
    id="email" 
    name="email" 
    class="form-control" 
    placeholder="Email " 
    v-model="user.email" 
    v-validate="'required|email'" 
/> 
<span class="error-msg" v-show="errors.has('email')">{{ errors.first('email') }}</span>][1]

请参阅图片以供参考:https ://i.stack.imgur.com/Dpz4F.png

---------------[UPDATE]:----------------
我覆盖了电子邮件规则,现在是:

const email = {
  getMessage(field, args) {
    return `The ${field} must be a valid email`;
  },
  validate(value, args) {
    const EMAILREG = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
    
    console.log(EMAILREG.test(value));
    console.log(VeeValidate.Rules.email(value));
    return VeeValidate.Rules.email(value) || EMAILREG.test(value);;
  }
};

VeeValidate.Validator.extend('email', email);


这个自定义规则所做的是,即使它在 vee-validate 的电子邮件验证中失败,如果它在 regEx 验证中为真,它也会接受它。但是,它将 admin@a 视为有效的电子邮件地址。

4

1 回答 1

0

可能您应该将 * 替换为 +,因为 * 表示出现 0 次或多次,而 + 表示出现 1 次或多次。因此,替换为 + 将确保在 .

^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$

一些测试用例:

admin@gmail.com - Pass
admin - Fail
admin1@gmail.com - Pass
admin@gmail1.com - Pass
admin@gmail.net - Pass
admin@gmail.ne - Pass
admin@gmail - Fail
admin@ - Fail
@gmail.com - Fail

演示

于 2018-06-19T04:15:10.893 回答