我需要使用javascript表单验证例程来扫描嵌入式电话号码和电子邮件地址的各种输入文本字段。这适用于可以免费发布但与买家“付费连接”的分类广告系统,因此目的是尽可能地防止(尽可能)用户(发布广告的用户)仅仅嵌入手机和/或电子邮件联系信息以绕过系统。
我现在谷歌搜索已经有一段时间了,RegEx不是我的强项,所以我很难找到一小段代码来帮忙。我想做的就是获得文本字段的通过/失败(如果它似乎没有嵌入的电子邮件和/或电话号码则通过,如果没有则失败)
有没有人已经有一个很好的JavaScript解决方案呢?
答案 0 :(得分:2)
试试这个:
var text = textArea.value;
if (text.search(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/))
...;//Contains email
if (text.search(/^[+]?(?!0{5})(\d{5})(?!-?0{4})(-?\d{4})?$/))
...;//Contains phone
答案 1 :(得分:1)
感谢大家的投入。这是我最终得到的版本,希望它可以帮助别人。注意:我删除了此帖子的实际“坏”字词,以便通过此网站的过滤器。您可以将'badword1','badword2'等替换为实际的“坏”字(您知道,如nukular,calender,ekcetera):
function isAllowed(varField) {
var msg = '';
var pass = true;
var regex0=/\b(@|www|WWW|http|hotmail|gmail|badword1|badword2|badword3)\b/i;
if (regex0.test(varField))
{
msg += "Text appears to have disallowed words (e.g. profanity, email, web address, @ symbol, etc.)\n";
pass = false;
}
var regex1=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i;
if (regex1.test(varField))
{
msg += "Text appears to have email address in it (not allowed\n";
pass = false;
}
var regex2=/\b\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}\b/i;
if (regex2.test(varField))
{
msg += "Text appears to have a phone number in it (not allowed)\n";
pass = false;
}
if (msg!='')
{
alert(msg);
}
return pass;
}
答案 2 :(得分:0)
这将找到电子邮件地址:\ b [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] +。[A-Z] {2,4} \ b
这会找到电话号码:\ b(()?\ d {2,3}(?(1)))(?: - ?\ d {3} - ?\ d {4 } | \ d {11})\ b'/ p>
答案 3 :(得分:0)
你可以得到一些,但不要期望得到最多(特别是如果人们意识到这个要求,或者有多个机会填写表格)。
人们已经非常善于绕过机器人检测电子邮件地址,通过像“hotmail dot com上的myaddresses”这样的事情,而且有一百万种变体。此外,电话号码因地区而异。
答案 4 :(得分:0)
您没有说明您正在使用哪种服务器端技术,但最好在服务器上执行此类处理。我总是喜欢自己的工作(ASP.NET)中的服务器端,因为面向对象的服务器端框架的灵活性和强大功能几乎每次都胜过JavaScript。这种情况也不例外,因为JavaScript regular expression support似乎缺少几个关键功能。
无论您选择转到服务器端还是客户端,我都发现在使用Espresso等工具时,编写RegEx代码会大大简化。如果您在Mac上运行,请考虑Reggy。这些工具通常带有几个“库存”RegEx表达式,用于各种常见查询(即电话号码,电子邮件等),这些查询通常只需要很少的修改。