我有一个用于验证电子邮件地址的正则表达式字符串,我想通过 json 将其发送到我的应用程序。我从dojo/Json收到错误消息:
Uncaught SyntaxError: Unexpected token ]
Run Code Online (Sandbox Code Playgroud)
因此,我将 JSON 文件放入JSONLint中,并得到了这个稍微更具体的错误:
Parse error on line 3:
... { "regex": "^(([^<>()[\]\\.,;:\
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
Run Code Online (Sandbox Code Playgroud)
这是我的 json 文件内容:
{
"Email Address": {
"regex": "^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"
}
}
Run Code Online (Sandbox Code Playgroud)
Json.org 似乎没有提及任何有关转义正则表达式字符的内容...并且字符串本身已正确转义,因为我可以在 js 控制台中为该正则表达式字符串设置一个变量。
有人知道我能做些什么来让它发挥作用吗?
我读到,用户觉得必须验证他们的电子邮件才能完成简单的注册很烦人,但是删除这个额外的步骤并使用验证码来处理机器人会导致一种不舒服的情况,即用户无法重新获得对其帐户的控制,如果他们忘记了密码。
那么,该怎么办呢?除了电子邮件确认之外,还有其他选择吗?我想,只有当用户忘记密码时,才向用户注册时输入的电子邮件地址发送验证码可能是可以接受的。据我所知,不需要电子邮件确认的缺点是用户可能冒充其他人。由于我不想收集有关用户的任何信息,因此这本身不是问题。但是,如果合法用户尝试注册该网站,则该电子邮件地址将不可用。解决方案是,此时,用户可以被告知所选的电子邮件地址已被占用,并且他可以有机会更改其密码,使用验证码重新获得对其帐户的访问权限。这种方法有问题吗?有更好可行的解决方案吗?
顺便说一句,短信或付费第三方应用程序不适合我。
提前致谢。
假设我有一个联系表单,用户可以在其中输入他的电子邮件地址以及其他联系方式。我需要检查通用顶级域或电子邮件地址顶级域的有效性。一个例子:
猩红.1992@examplemail.paris
我需要检查 .paris 是否是有效的顶级域名。
请参阅此链接以获取可用域名列表,该列表提供了大约 1200 个域名。由于每天都会引入新域名,因此无法将域名存储在本地表中并进行搜索。请告诉我是否有任何可用的网络服务或免费 API,或者有任何其他方法来验证电子邮件地址。
我正在使用下面的代码来验证电子邮件
if (checkdnsrr($domain , "MX")) {
echo 'mx - pass <br>';
} else {
echo 'mx - fail <br>';
}
Run Code Online (Sandbox Code Playgroud)
我的愿望是检查域是否有效并具有 MX 记录。
我已经在使用正则表达式来检查电子邮件格式,但是人们输入了诸如 someone@gmail.con 之类的内容,这显然是错误的,但通过了基本格式验证。
我想进一步验证,但我不想走得太远而得到假阴性。
有没有人看到我的解决方案有任何问题或有更好的方法?
Amazon SES 有一个测试电子邮件地址列表,用于模拟不同的响应,包括软退回。不过,该地址是为 SES 保留的,使用其他电子邮件服务拨打时不会收到任何回复。
为了模拟硬退回,我可以简单地编造一些根本不存在的电子邮件,例如no-reply@domain.that.do.not.exist. 但是,有没有办法模拟软弹跳呢?
在 firebase 管理用户文档中,我找不到任何方法来压缩或缩短电子邮件验证链接的长度。功能运行良好,但从用户角度来看,此链接看起来又长又奇怪。我在互联网上搜索过但没有找到任何解决方案。下面是我的代码,请编码:
var actionCodeSettings = ActionCodeSettings.init()
actionCodeSettings.handleCodeInApp = false
let user = FirebaseAuthenticationHandler.shared.currentFirebaseUser
actionCodeSettings.url = URL.init(string: String(format: "https://example.firebaseapp.com/?verifyemail=%@", user.email!))
actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!)
user.sendEmailVerification(with: actionCodeSettings, completion: { (error) in
if error != nil {
print("\(error?.localizedDescription)")
} else {
print("Verfication email sent")
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的链接的屏幕截图:
我需要检查电子邮件是否存在。我正在使用 python3 的 py3dns 支持库。有一个错误说
要检查 mx 记录或检查电子邮件是否存在,您必须安装 pyDNS python 包
from validate_email import validate_email
is_valid = validate_email('example@example.com',verify=True)
Run Code Online (Sandbox Code Playgroud) 我有一个经过此验证的 bean:
@Email(message = "Email is not valid", regexp="{(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])}")
@NotEmpty(message = "Email cannot be empty")
private String email;
Run Code Online (Sandbox Code Playgroud)
当电子邮件为空时,消息很好,但是当我输入此文本时
perisava.util.Random@1d7f0036
Run Code Online (Sandbox Code Playgroud)
没有显示错误
我们使用 SonarQube 来获取有关代码库的质量指标。SonarQube 根据规则S6324在我们的 Node.js 代码库中标记了十多个错误,这些错误与 Google 上排名靠前的网站emailregex.com提倡的电子邮件验证正则表达式相关。该网站声称该正则表达式是 RFC 5322 官方标准。但是,正则表达式中的控制字符被 SonarQube 标记为要删除,因为它们是不可打印的字符。这是正则表达式:
\n(?:[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*|"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])\nRun Code Online (Sandbox Code Playgroud)\n以下是 SonarQube 抱怨的控制字符的完整列表:\n\xe2\x80\x98.\\x0e\xe2\x80\xa6\\x0e\xe2\x80\xa6\\x0c\xe2\x80\xa6\\x0c\xe2\x80\xa6\\x0b\xe2\x80\xa6\\x0c\xe2\x80\xa6\\x1f\xe2\x80\xa6\\x01\xe2\x80\xa6\\x1f\xe2\x80\xa6\\x01\xe2\x80\xa6\\x01\xe2\x80\xa6\\x09\xe2\x80\xa6\\x08\xe2\x80\xa6\\x0b\xe2\x80\xa6\\x0b\xe2\x80\xa6\\x0e\xe2\x80\xa6\\x0b\xe2\x80\xa6\\x08\xe2\x80\xa6\\x0c\xe2\x80\xa6\\x0e\xe2\x80\xa6\\x09\xe2\x80\xa6\\x01.\xe2\x80\x99
Regular-Expressions.info\ 的电子邮件页面确实解决了上述正则表达式的变体,如下所示:
\n\n\n您不应该\xe2\x80\x99t 使用此正则表达式的原因是它过于广泛。您的应用程序可能无法处理此正则表达式允许的所有电子邮件地址。域特定的路由地址可以包含不可打印的 ASCII 控制字符,如果您的应用程序需要显示地址,这可能会导致麻烦...
\n
但是,我似乎找不到任何信息来解释为什么某些站点添加这些不可打印的控制字符或“特定于域的路由地址”的含义。我查看了一些Stack Overflow 正则表达式问题和Stack Overflow Regex Wiki。控制字符似乎没有被解决。
\n有人可以解释一下正则表达式中这些控制字符的用途,并可能提供一些该正则表达式何时有用的示例吗?
\n(注意:请避免关于验证电子邮件的最佳/最差正则表达式是什么的争论/讨论。在这个问题上似乎没有达成一致,这个问题已经在 Stack Overflow 和更广泛的互联网上的许多地方进行了讨论和辩论本题重点是理解正则表达式中控制字符的用途)。
\n我也联系了 SonarQube 社区,但似乎没有人有任何答案。
\n仍在寻找权威答案,以解释为什么上面的电子邮件正则表达式专门检查电子邮件地址中的不可打印控制字符。
\nRFC5322 第 5 节中有这样的内容,但它是关于消息正文,而不是地址:
\n …我正在开发一个Web应用程序,要求我检查用户的电子邮件是否有效且存在.(我正在进行正则表达式检查)问题是验证电子邮件是否存在的最佳做法是什么?
以下是我的一些选项:
email-validation ×10
email ×4
regex ×3
dns ×1
firebase ×1
http ×1
ios ×1
java ×1
javascript ×1
json ×1
node.js ×1
php ×1
python ×1
registration ×1
sonarqube ×1
spring ×1
spring-boot ×1
swift ×1
tld ×1
url ×1
web-services ×1