如何在clojure中验证电子邮件

如何在clojure中验证电子邮件,clojure,clojurescript,Clojure,Clojurescript,我想使用clojure验证电子邮件。我该怎么做呢 (defn validate-email [email] ) 我想知道如何使用正则表达式编写函数体。下面是一个简单函数的示例,该函数将根据简单的regexp检查输入电子邮件字符串: (defn validate-email [email] (re-matches #".+\@.+\..+" email)) 如果输入与+\@.+\..+regexp匹配,则返回输入电子邮件,否则返回nil: (validate-email "foo

我想使用clojure验证电子邮件。我该怎么做呢

(defn validate-email [email]

    )

我想知道如何使用正则表达式编写函数体。

下面是一个简单函数的示例,该函数将根据简单的regexp检查输入
电子邮件
字符串:

(defn validate-email [email]
  (re-matches #".+\@.+\..+" email))
如果输入与
+\@.+\..+
regexp匹配,则返回输入
电子邮件
,否则返回
nil

(validate-email "foo@bar.baz") ;=> "foo@bar.baz"
(validate-email "invalid") ;=> nil
(if (validate-email "foo@bar.baz") :valid :invalid) ;=> :valid
(if (validate-email "invalid") :valid :invalid) ;=> :invalid

如果您需要一个好的regexp来匹配电子邮件,请参阅。

下面是一个简单函数的示例,该函数将根据简单regexp检查输入
电子邮件
字符串:

(defn validate-email [email]
  (re-matches #".+\@.+\..+" email))
如果输入与
+\@.+\..+
regexp匹配,则返回输入
电子邮件
,否则返回
nil

(validate-email "foo@bar.baz") ;=> "foo@bar.baz"
(validate-email "invalid") ;=> nil
(if (validate-email "foo@bar.baz") :valid :invalid) ;=> :valid
(if (validate-email "invalid") :valid :invalid) ;=> :invalid
如果您需要一个好的regexp来匹配电子邮件,请参阅

对于Clojure中的正则表达式,这可能会有所帮助:


或者,可用于验证电子邮件,旁边

对于Clojure中的正则表达式,这可能会有所帮助:



或者,可以用来验证电子邮件,除此之外。

请注意,使用正则表达式来标识“良好”或合法的电子邮件地址是出了名的难以正确获得的。存在许多容易被忽略的边缘情况。由于一些更为神秘的邮件路由方法已经不再使用,它变得容易多了,但它仍然很棘手

我的建议是使用类似的验证库,它可以用于客户端和服务器端,即clojure或clojurescript。它内置了对电子邮件验证的支持。还有许多其他lib也做了类似的事情


这会让你振作起来。您还可以查看源代码,了解解决此问题的一种方法。以后,一旦你有了更多的经验,你可以尝试自己做一些类似的事情(但更好:-)

注意,使用正则表达式来识别“好的”或合法的电子邮件地址是众所周知的困难。存在许多容易被忽略的边缘情况。由于一些更为神秘的邮件路由方法已经不再使用,它变得容易多了,但它仍然很棘手

我的建议是使用类似的验证库,它可以用于客户端和服务器端,即clojure或clojurescript。它内置了对电子邮件验证的支持。还有许多其他LIB也做类似的事情


这会让你振作起来。您还可以查看源代码,了解解决此问题的一种方法。以后,一旦你有了更多的经验,你可以尝试自己做一些类似的事情(但更好:-)

关于如何将电子邮件地址与正则表达式匹配,在SO和其他地方有很多讨论。在我看来,你要问的是如何在Clojure中使用正则表达式

读取器将
#“
识别为以
结尾的文本正则表达式的开头。示例:
#“(t)+”

您还可以使用从字符串编译正则表达式,以便动态创建正则表达式模式,如:
(re pattern(str“^”my var“$”)


如果您试图使用正则表达式来匹配整个字符串,则可以使用。它返回
nil
(不匹配)、原始字符串(匹配)或
[完整字符串,捕获-1,捕获-2,…]的向量

(re-matches #"abc" "abcdefg") ;; => nil
(re-matches #"abc.*" "abcdefg") ;; => "abcdefg"
(re-matches #"abc(.)(.*)" "abcdefg") ;; => ["abcdefg", "d", "efg"]

接受正则表达式和字符串并返回一个。您可以使用该方法获得下一个匹配,也可以使用Clojure的

如果您使用的是匹配器,则可以使用从最近的匹配中获取组


re-find
的另一个用法是使用正则表达式和字符串仅返回第一个匹配项:

(re-find #"[aeiou].[aeiou]" "alienate") ;; => "ali"

在许多情况下,您会发现使用
re matcher
可以更方便地替代
re-find
。它返回所有匹配项的惰性序列:

(re-seq #"[aeiou].[aeiou]" "alienate") ;; => ("ali", "ena"), lazily


最后,您可以搜索并替换为和。有助于解决正确转义字符这一恼人的问题。

关于如何将电子邮件地址与正则表达式匹配,在SO和其他地方有很多讨论。在我看来,你要问的是如何在Clojure中使用正则表达式

读取器将
#“
识别为以
结尾的文本正则表达式的开头。示例:
#“(t)+”

您还可以使用从字符串编译正则表达式,以便动态创建正则表达式模式,如:
(re pattern(str“^”my var“$”)


如果您试图使用正则表达式来匹配整个字符串,则可以使用。它返回
nil
(不匹配)、原始字符串(匹配)或
[完整字符串,捕获-1,捕获-2,…]的向量

(re-matches #"abc" "abcdefg") ;; => nil
(re-matches #"abc.*" "abcdefg") ;; => "abcdefg"
(re-matches #"abc(.)(.*)" "abcdefg") ;; => ["abcdefg", "d", "efg"]

接受正则表达式和字符串并返回一个。您可以使用该方法获得下一个匹配,也可以使用Clojure的

如果您使用的是匹配器,则可以使用从最近的匹配中获取组


re-find
的另一个用法是使用正则表达式和字符串仅返回第一个匹配项:

(re-find #"[aeiou].[aeiou]" "alienate") ;; => "ali"

在许多情况下,您会发现使用
re matcher
可以更方便地替代
re-find
。它返回所有匹配项的惰性序列:

(re-seq #"[aeiou].[aeiou]" "alienate") ;; => ("ali", "ena"), lazily


最后,您可以搜索并替换为和。帮助解决正确转义字符的麻烦问题。

Clojure
有一个非常有用的验证库,即
valip

如果您查看
谓词.clj
文件,您可以看到有
电子邮件地址?
有效电子邮件域?
功能,这些功能正是针对您的用户的。 因此,您可以按如下方式使用它

(定义验证电子邮件[e]