Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在Elixir中使用W3C电子邮件正则表达式_Regex_Elixir - Fatal编程技术网

Regex 如何在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

我试图在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 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-]+)*$")