我发现jQuery验证插件正则表达式不足以满足我的要求.它接受任何电子邮件地址xxx@hotmail.x作为有效的电子邮件地址,而我希望能够提供此正则表达式/^([a-zA-Z0-9_.-+])+\@(([a-zA -Z0-9 - ])+.)+([a-zA-Z0-9] {2,4})+ $ /以便它将验证完整的.com部分地址.我更关心能够提供我自己的正则表达式而不是获得一个傻瓜证明正则表达式(因为没有用于电子邮件验证的傻瓜证据正则表达式)
仅供参考:我也在进行服务器端验证,但此时我并不担心哪个电子邮件地址是正确的.
有没有办法在jQuery validate插件的"规则"部分内执行此操作?
这是我现在的规则部分:
rules: {
email: {
required: {
depends:function(){
$(this).val($.trim($(this).val()));
return true;
}
},
email: true
},
Run Code Online (Sandbox Code Playgroud) 根据RegExp文档,我们必须使用"JavaScript"(Perl 5)正则表达式:Ecma Specification.您使用什么模式进行电子邮件验证?
当用户注册我的Web应用程序时,我会发送一封电子邮件来验证他的收件箱.在电子邮件中有一个指向这样的资源的链接:
GET /verify/{token}
Run Code Online (Sandbox Code Playgroud)
由于资源在幕后更新,它是否会破坏RESTful方法?
我怎么能以RESTful方式做到这一点?
场景:
我的网络应用程序上有一个联系表单,它有很多垃圾邮件.
我正在松散地验证电子邮件地址的格式,即 ^.+@.+\..+$
我使用的是垃圾邮件过滤服务(defensio),但返回的垃圾邮件分数与有效邮件重叠.在0.4的阈值处,一些垃圾邮件通过并且一些客户的问题被错误地抛入日志中并显示错误.
所有垃圾邮件都使用虚假的电子邮件地址,例如zxmzxm@ywduasm.com
在美国专用PHP5 Linux服务器,mysql,仅记录垃圾邮件,通过电子邮件发送非垃圾邮件(未存储).
建议:
使用php checkdnsrr(preg_replace(/^.+?@/, '', $_POST['email']), 'MX')检查电子邮件域解析为有效地址,登录到文件,然后重定向错误的邮件无法解决,像以前一样继续垃圾邮件过滤服务,以解决根据问题解决的地址checkdnsrr().
我已经读过(我自己也对此持怀疑态度),你永远不应该将这种类型的验证留给远程查找,但为什么呢?
除了连接问题,我还会遇到比联系表格更大的问题,checkdnsrr是否会遇到误报/否定?
是否会有一些不会解决的地址类型?gov地址?ip电子邮件地址?
我是否需要转义传递给checkdnsrr()的主机名?
解决方案: 所有三个答案的组合(希望我可以接受不止一个作为复合答案).
我在用:
$email_domain = preg_replace('/^.+?@/', '', $email).'.';
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){
//validation error
}
Run Code Online (Sandbox Code Playgroud)
正在记录和轮换所有垃圾邮件.以期在以后升级到作业队列.
一些评论是关于要求邮件服务器让用户验证,我觉得这将是太多的流量,可能会让我的服务器被禁止或以某种方式陷入麻烦,这只是为了删除大多数正在发送的电子邮件由于服务器地址无效而退回.
http://en.wikipedia.org/wiki/Fqdn 和
RFC2821
The lookup first attempts to locate an MX record associated with the name.
If a CNAME record is found instead, the resulting name is processed as if
it were the initial name.
If no MX records are found, …Run Code Online (Sandbox Code Playgroud) 德语变音符号(ä,ö,ü)和sz字符(ß)是否在电子邮件地址的本地部分有效?
例如,请使用此电子邮件地址: björn.nußbaum@trouble.org
RFC 5322非常清楚地说,不允许使用变音符号(以及其他国际字符).如果我看一下第3.4.1章,关于本地部分有如下内容:
local-part = dot-atom / quoted-string / obs-local-part
那是什么意思dot-atom?它在第3.2.3章中描述:嗯,长话短说:Printable US-ASCII characters not including specials
所以在整个RFC 5322中我看不到任何有关国际字符的内容.或者RFC 5322已经过时了?(RFC 822 - > RFC 2822 - > RFC 5322)
更新: 对我来说重点是:目前的标准是什么?允许或不允许国际字符? RFC 5322标记为DRAFT STANDARD.所以我认为这是最新的依赖来源,不是吗?
Efran提到,RFC 5336允许使用国际字符.但RFC 5336被标记为实验,所以这对我来说并不重要.
我正在使用PHP 5.3.10.这是代码:
<?php
$email = "test@example.c";
if (filter_var($email, FILTER_VALIDATE_EMAIL))
echo "Email: ".$email." correct";
else
echo "email not correct";
?>
Run Code Online (Sandbox Code Playgroud)
它返回:"Email: test@example.c正确.
我认为只有一个字符的顶级域名不正确(根据此列表,我不知道单字符长度的TLD :) http://data.iana.org/TLD/tlds-alpha-by-domain.txt.
那么,FILTER_VALIDATE_EMAIL过滤器是否正常工作?
我检查了 StackOverflow 并找不到任何可以回答如何在 Go Language 中验证电子邮件的问题。
经过一番研究,我想出了并根据我的需要解决了它。
我有这个正则表达式和Go 函数,它工作正常:
import (
"fmt"
"regexp"
)
func main() {
fmt.Println(isEmailValid("test44@gmail.com")) // true
fmt.Println(isEmailValid("test$@gmail.com")) // true -- expected "false"
}
// isEmailValid checks if the email provided is valid by regex.
func isEmailValid(e string) bool {
emailRegex := regexp.MustCompile("^[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])?)*$")
return emailRegex.MatchString(e)
}
Run Code Online (Sandbox Code Playgroud)
问题是它接受了我不想要的特殊字符。我尝试使用一些来自其他语言的“正则表达式”表达式,但它在调试中抛出错误“未知转义”。
谁能给我一个很好的正则表达式或任何适用于 GoLang 的快速解决方案 (pkg)?
是否有任何规则允许在任何电子邮件ID中具有指定数量的@符号.如果我们要使用PHP检查电子邮件ID是否有效,请记住我的想法.
为了找出电子邮件地址本地部分中的前导下划线是否可以接受,我会参考哪些RFC?
例: _johndoe@hotmail.com
当然,这个问题也适用于任何领先的特殊角色.
我在维基百科中找到了这一行,但在RFC本身内找不到任何引用.我在这里错过了什么吗?
本地部分电子邮件地址的本地部分可以使用任何这些ASCII字符RFC 5322第3.2.3节:
我试图通过首先解析其 dns 来验证电子邮件是否确实存在,然后使用以下代码检查电子邮件是否有效:
email = test@cisco.com
domain = email.split("@")[-1]
records = dns.resolver.query(domain, 'MX')
mxRecord = records[0].exchange
mxRecord = str(mxRecord)
server.connect(mxRecord)
server.helo(host)
server.mail('myemail@gmail.com')
code, message = server.rcpt(str(email))
server.quit()
if code == 250:
print('valid email', message)
else:
print('invalid email', message)
Run Code Online (Sandbox Code Playgroud)
这几次有效,但是当我发送多个请求时,我收到如下消息:
“5.7.1 服务不可用,客户端主机 [122.166.xxx.xxx] 使用 Spamhaus 被阻止。要请求从此列表中删除,请参阅 http://www.spamhaus.org/lookup.lasso (AS160312312) [BL2NAM02FT12312.eop-nam02。 prod.protection.outlook.com]'"
我知道他们正试图阻止我的 IP 地址,因为它认为它是垃圾邮件。
以下是我的问题:
server.mail('myemail@gmail.com')
email-validation ×10
email ×3
php ×3
regex ×2
dart ×1
email-spam ×1
filter-var ×1
go ×1
jquery ×1
mx-record ×1
python ×1
rest ×1
rfc ×1
rfc5322 ×1
smtp ×1