【问题标题】:Lua pattern matching for email address电子邮件地址的 Lua 模式匹配
【发布时间】:2015-05-06 17:45:57
【问题描述】:

我有以下代码:

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 - 数字,默认情况下我会捕获任何标点符号,包括逗号。

但我想我错了。或者还有其他我没有看到的东西。 第二双眼睛将不胜感激。

【问题讨论】:

  • 请查看此帖子:stackoverflow.com/questions/21040325/…。它能解决你的问题吗?
  • 那个“电子邮件地址”与我的模式不匹配。话虽这么说,如果您想实际允许所有有效的电子邮件地址,那么电子邮件验证很简单,并且此模式无法匹配任意数量的有效地址。
  • 阅读lhf 对该问题的评论,了解正确执行此操作的难度。然后放弃。 =)
  • 锚 ^ 和 $ 呢? eval.in/private/72d09e8e914b15

标签: email lua lua-patterns


【解决方案1】:

"test@test1.test2,com" 的示例中,模式匹配test@test1.test2 并由于以下, 而停止。这不是说谎,它确实匹配,只是不是你所期望的。要修复,请使用锚点:

^[A-Za-z0-9%.]+@[%a%d]+%.[%a%d]+$

你可以进一步简化为:

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

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

【讨论】:

  • 您的正则表达式在带有诸如.co.uk 之类的顶级域名的电子邮件中失败
【解决方案2】:

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

我找不到任何允许电子邮件允许的某些特殊情况的方法。 + 或引号之类的内容实际上在电子邮件中是可以接受的。

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

http://ohdoylerules.com/snippets/validate-email-with-lua

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

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2014-12-13
    相关资源
    最近更新 更多