Email 电子邮件地址的Lua模式匹配

Email 电子邮件地址的Lua模式匹配,email,lua,lua-patterns,Email,Lua,Lua Patterns,我有以下代码: if not (email:match("[A-Za-z0-9%.]+@[%a%d]+%.[%a%d]+")) then print(false) end 它目前不流行 "test@yahoo,ca" or "test@test1.test2,com" 作为一个错误 我想,通过将输入限制为%a-字符和%d-数字,默认情况下,我可以捕获任何标点符号,包括逗号 但我想我错了。或者还有其他我没看到的东西。 请再给我一双眼睛 在的示例中test@test1.test2,

我有以下代码:

if not (email:match("[A-Za-z0-9%.]+@[%a%d]+%.[%a%d]+")) then
     print(false)
end
它目前不流行

 "test@yahoo,ca"  or "test@test1.test2,com"
作为一个错误

我想,通过将输入限制为
%a
-字符和
%d
-数字,默认情况下,我可以捕获任何标点符号,包括逗号

但我想我错了。或者还有其他我没看到的东西。 请再给我一双眼睛

的示例中test@test1.test2,com“
,模式匹配
test@test1.test2
并由于以下原因而停止
。这不是撒谎,这是匹配的,只是不是你所期望的。要固定,请使用锚定:

^[A-Za-z0-9%.]+@[%a%d]+%.[%a%d]+$
您可以将其进一步简化为:

^[%w.]+@%w+%.%w+$

其中
%w
匹配字母数字字符。

我很难找到Lua的真正电子邮件验证功能

我找不到任何允许电子邮件允许的特殊情况。像
+
或引号之类的东西在电子邮件中实际上是可以接受的

我编写了自己的Lua函数,可以通过电子邮件地址规范中列出的所有测试


我还添加了一堆注释,因此如果您想忽略某些奇怪的验证,只需删除该特定检查的if语句即可

请查看此帖子:。它解决了你的问题吗?那个“电子邮件地址”对我来说不符合这个模式。也就是说,如果您希望实际允许所有有效的电子邮件地址,并且此模式将无法匹配任何数量的有效地址,那么电子邮件验证并不简单。请阅读
lhf
对该问题的评论,看看这到底有多难做到正确。然后放弃那么锚和美元呢?您的正则表达式在使用TLD(如
.co.uk