修改正则表达式以检查 sting 是否在 jquery 验证中不包含电子邮件地址
Modify the Regex to check if sting contains no email address in jquery validate
我有一个正则表达式,用于检查是否没有输入有效的电子邮件地址
$.validator.addMethod('contains_no_email', function (value, element) {
return this.optional(element) || /^(?!\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$)/.test(value);
}, "Do not include an email address");
现在我需要修改它来检查 sting 是否不包含电子邮件地址。
我要:
abc@example.com(真)
abc@example.com 一些单词 (True)
一些单词 abc@example.com (True)
一些单词 abc@example.com 一些单词(正确)
一些词(错误)
简单地说,您可以尝试使用单词边界而不是 ^
和 $
锚围绕您当前的电子邮件正则表达式:
$.validator.addMethod('contains_no_email', function (value, element) {
return this.optional(element) || /\b\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)\b/.test(value);
}, "Do not include an email address");
您需要确保输入文本与包含电子邮件的字符串不匹配。因此,您可以在此处遵循两种方法:
使用 /\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*/
正则表达式并设置 contains_no_email: false
使用匹配任何字符串的正则表达式,但包含带有 /^(?![^]*?\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)/
的类似电子邮件的字符串的字符串,并使用 contains_no_email: true
.
您可以通过更改 contains_no_email
值来交换逻辑。
这是一个示例解决方案:
$.validator.addMethod('contains_no_email', function (value, element) {
return this.optional(element) ||
/^(?![\s\S]*?\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)/.test(value);
}, "Do not include an email address"
);
$('#myform').validate({
// other options,
rules: {
"email": {
required: true,
contains_no_email: true
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/additional-methods.js"></script>
<form id="myform">
<input type="text" name="email" /><br/>
<br/>
<input type="submit" />
</form>
我有一个正则表达式,用于检查是否没有输入有效的电子邮件地址
$.validator.addMethod('contains_no_email', function (value, element) {
return this.optional(element) || /^(?!\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$)/.test(value);
}, "Do not include an email address");
现在我需要修改它来检查 sting 是否不包含电子邮件地址。
我要:
abc@example.com(真)
abc@example.com 一些单词 (True)
一些单词 abc@example.com (True)
一些单词 abc@example.com 一些单词(正确)
一些词(错误)
简单地说,您可以尝试使用单词边界而不是 ^
和 $
锚围绕您当前的电子邮件正则表达式:
$.validator.addMethod('contains_no_email', function (value, element) {
return this.optional(element) || /\b\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)\b/.test(value);
}, "Do not include an email address");
您需要确保输入文本与包含电子邮件的字符串不匹配。因此,您可以在此处遵循两种方法:
使用
/\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*/
正则表达式并设置contains_no_email: false
使用匹配任何字符串的正则表达式,但包含带有
/^(?![^]*?\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)/
的类似电子邮件的字符串的字符串,并使用contains_no_email: true
.
您可以通过更改 contains_no_email
值来交换逻辑。
这是一个示例解决方案:
$.validator.addMethod('contains_no_email', function (value, element) {
return this.optional(element) ||
/^(?![\s\S]*?\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)/.test(value);
}, "Do not include an email address"
);
$('#myform').validate({
// other options,
rules: {
"email": {
required: true,
contains_no_email: true
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/additional-methods.js"></script>
<form id="myform">
<input type="text" name="email" /><br/>
<br/>
<input type="submit" />
</form>