Regex 如何在Elixir中使用W3C电子邮件正则表达式
我试图在Elixir中使用以下W3C电子邮件正则表达式(来源:): 在这样一个函数中Regex 如何在Elixir中使用W3C电子邮件正则表达式,regex,elixir,Regex,Elixir,我试图在Elixir中使用以下W3C电子邮件正则表达式(来源:): 在这样一个函数中 def get_type(value)do 康多 String.match?(值,~r/^[a-zA-Z0-9.!$%&'*+/=?^ `{124;}-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)-> :电邮 String.match?(值,~r/^\+[1-9][0-9]\d{1,14}$/)-> :电话号码 结束 结束 但是我得到了一个编译错误 unexpected to
def get_type(value)do
康多
String.match?(值,~r/^[a-zA-Z0-9.!$%&'*+/=?^ `{124;}-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)->
:电邮
String.match?(值,~r/^\+[1-9][0-9]\d{1,14}$/)->
:电话号码
结束
结束
但是我得到了一个编译错误
unexpected token: "`" (column 56, code point U+0060)
我在这里做错了什么?既然您使用了
/
来限定sigil的内容,那么您需要转义regexp中的/
字符。另一种解决方案是选择一个不属于regexp的分隔符(如”
或),避免此问题的一种非常实用的方法是将regex作为字符串编写,并在其上调用regex.compile
Regex.compile!("^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$")
这并不是特别回答您关于regex的问题,@julp完美地回答了这个问题
我在这里告诉不要使用正则表达式来验证电子邮件。您提到的正则表达式无论如何都是不正确的
下面是一封无法通过正则表达式的完全有效的电子邮件的示例:“John Smith”@example.com
所以我的猜测是:检查是否存在@
def get_type(value)do
如果String.contains?(值“@”),
电子邮件,
电话号码
结束
这很有道理。有一段时间我在想“好吧,但是如果我得到john@doe作为输入,它将是错误的”但是这种情况实际上永远不会发生,因为验证是在第三方的另一个地方进行的。这个函数实际上应该只知道输入是电子邮件还是电话号码。谢谢这个聪明的提示john@doe根据RFC2822、RFC5322和RFC6854,这是一封非常有效的电子邮件。
~R/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
# or
~R<^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$>
Regex.compile!("^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$")