Versions
vee-validate:2.1.0-beta.2
vue:2.5.7
Description
使用了电子邮件验证,但它没有考虑一些有效的电子邮件,例如:
- 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视为有效的电子邮件地址 .
1 回答
也许你应该替换* as as *是0或更多次出现,并且是1或更多次出现 . 因此,替换将确保事后存在的东西 .
一些测试用例:
DEMO