修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址
Posted
技术标签:
【中文标题】修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址【英文标题】:Modify the Regex to check if sting contains no email address in jquery validate修改正则表达式以检查 sting 是否在 jquery validate 中不包含电子邮件地址 【发布时间】:2021-08-08 08:28:51 【问题描述】:我有一个正则表达式来检查是否没有输入有效的电子邮件地址
$.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");
现在我需要修改它以检查一个字符串是否不包含电子邮件地址。
我想要:
abc@example.com(真)
abc@example.com一些话(真)
一些词abc@example.com(真)
一些词abc@example.com一些词(真)
一些词(假)
【问题讨论】:
验证失败需要false
,验证通过需要true
。根据您的描述,您所有的布尔值都是向后的。
【参考方案1】:
您需要确保输入文本与包含电子邮件的字符串不匹配。因此,您可以在此处遵循两种方法:
使用/\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>
【讨论】:
感谢您的时间和精力,您能告诉我正则表达式以同样的方式检查 url 吗? @DMP 通常,人们使用非常广泛的模式,例如/https?:\/\/\S+/
【参考方案2】:
简单地说,您可以尝试使用单词边界而不是 ^
和 $
锚点来围绕当前的电子邮件正则表达式:
$.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");
【讨论】:
感谢您的时间和精力,其中有错误Invalid regular expression: /\b\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+\b/: Unterminated group
抱歉,这里缺少一个结束)
。
现在没有报错,但是不行
这里没有使用单词边界的意义,因为在模式的开始和\w
和\w
和模式的结束之间总是存在隐含的单词边界。无论如何,问题不只是这里的正则表达式,代码和正则表达式都应该考虑。以上是关于修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章