Regex 使用正则表达式或其他方式检查电子邮件的字符串
我尝试了以下代码,但它给了我nomatchRegex 使用正则表达式或其他方式检查电子邮件的字符串,regex,erlang,email-validation,Regex,Erlang,Email Validation,我尝试了以下代码,但它给了我nomatch re:run("qw@qc.com", "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"). 我到这儿来了 编辑: 下一步不起作用 re:run("345345", "\b[0-9]+\b"). 如果你只收到了一封字符串形式的电子邮件,那么这封邮件什么时候会匹配 re:run("qw@qc.com", "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$"). 看起来你需要一个
re:run("qw@qc.com", "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b").
我到这儿来了
编辑:
下一步不起作用
re:run("345345", "\b[0-9]+\b").
如果你只收到了一封字符串形式的电子邮件,那么这封邮件什么时候会匹配
re:run("qw@qc.com", "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$").
看起来你需要一个不区分大小写的匹配
当前[A-Z0-9.uz%+-]
(例如)仅匹配大写字符(加上数字等)
一种解决方案是指定[A-Za-z]
。另一个解决方案是在匹配之前将您的电子邮件地址转换为大写。看起来您需要不区分大小写的匹配
当前[A-Z0-9.uz%+-]
(例如)仅匹配大写字符(加上数字等)
一种解决方案是指定
[A-Za-z]
。另一个解决方案是在匹配之前将您的电子邮件地址转换为大写。我不太愿意回答这个问题,因为我认为它依赖于一个错误的假设,即您可以使用正则表达式确定电子邮件地址是否有效。有关更多详细信息,请参阅;简而言之,我注意到您问题中的regexp不接受和顶级域
也就是说,你需要避开反斜杠。您希望字符串包含反斜杠,但在Erlang中,反斜杠在字符串中用于转义各种字符,因此任何文字反斜杠都需要写成\
。试试这个:
3> re:run("qw@qc.com", "\\b[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}\\b").
{match,[{0,9}]}
或者更好,这是:
8> re:run("qw@qc.com", "\\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\b").
{match,[{0,9}]}
这是regexp,修改为使用
\\b
而不是^
和$
我不太愿意回答这个问题,因为我认为它依赖于一个错误的假设,即您可以使用正则表达式确定电子邮件地址是否有效。有关更多详细信息,请参阅;简而言之,我注意到您问题中的regexp不接受和顶级域
也就是说,你需要避开反斜杠。您希望字符串包含反斜杠,但在Erlang中,反斜杠在字符串中用于转义各种字符,因此任何文字反斜杠都需要写成\
。试试这个:
3> re:run("qw@qc.com", "\\b[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}\\b").
{match,[{0,9}]}
或者更好,这是:
8> re:run("qw@qc.com", "\\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\b").
{match,[{0,9}]}
这是regexp,修改为使用
\\b
而不是^
和$
''re:run('qw@qw.qw“,“\b[A-Za-z0-9.+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b”)-给我一个nomatch('re:run('qw@qw.qw“,“\b[A-Za-z0-9.\uz%+-]+@[A-Za-z0-9.-]+\[A-Za-z]{2,4}\b”)。”-给我一个nomatch((+1,但您仍然应该扩展它,以允许在localpart中使用例如=
,并注意,在更棘手的情况下,任何使用正则表达式的尝试都将失败。将-
添加到域part将至少允许国际化域名的punycode表示(当然,您应该完全放弃长度限制)。此外,您应该允许任意深度的子域—许多CCTLD甚至不允许只有两个部分的域名。+1但您仍然应该扩展此功能,以允许在localpart中使用例如=
,并注意,在更棘手的情况下,任何使用正则表达式的尝试都将失败。将-
添加到域部分至少会允许国际化域名的punycode表示(当然,你应该完全放弃长度限制)。此外,你应该允许任意深度的子域——许多CCTLD甚至不允许只有两部分的域名。