使用正则表达式或其他方式检查字符串的电子邮件

Yol*_*ola 1 regex erlang email-validation

我尝试过以下代码,但它给了我无与伦比的代码.

re:run("qw@qc.com", "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b").
Run Code Online (Sandbox Code Playgroud)

regexp我来到这里http://www.regular-expressions.info/email.html

编辑:下一步不起作用

re:run("345345", "\b[0-9]+\b").
Run Code Online (Sandbox Code Playgroud)

如果您在字符串中收到电子邮件,那么该字符串将匹配

re:run("qw@qc.com", "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$").
Run Code Online (Sandbox Code Playgroud)

leg*_*cia 5

我不愿回答这个问题,因为我认为它依赖于一个不正确的假设 - 你可以用正则表达式确定一个电子邮件地址是否有效.有关详细信息,请参阅此问题 ; 从短暂的一瞥,我注意到你的问题中的正则表达式不接受.museum.рф顶级域名.

也就是说,你需要逃避反斜杠.您希望字符串包含反斜杠,但在Erlang中,在字符串内部使用反斜杠来转义各种字符,因此需要将任何文字反斜杠写为\\.试试这个:

3> re:run("qw@qc.com", "\\b[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}\\b").
{match,[{0,9}]}
Run Code Online (Sandbox Code Playgroud)

或者更好,这个:

8> re:run("qw@qc.com", "\\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\b").
{match,[{0,9}]}
Run Code Online (Sandbox Code Playgroud)

这是HTML 5标准中使用的正则表达式,修改为使用\\b而不是^$.

  • +1但你仍然应该扩展这个以允许例如localpart中的`=`,并注意任何使用正则表达式的尝试都会在棘手的角落情况下失败.将`-`添加到域部分至少会允许国际化域名的punycode表示(当然,你应该完全删除长度约束).此外,您应该允许任意深度的子域名 - 许多ccTLD甚至不允许只有两个部分的域名. (2认同)