在Ruby中用于电子邮件的正则表达式?
在Ruby中,有时我们需要检查一个字符串是否是有效的电子邮件地址。为了实现这个功能,我们可以创建一个常量变量来存储我们的正则表达式,并使用它来验证字符串是否符合电子邮件地址的常见模式。
以下是一个可以验证字符串是否符合电子邮件地址模式的正则表达式代码:
VALID_EMAIL_REGEX = /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
通过观察这个表达式,我们可以看到它首先允许字母、数字、破折号和点号。然后我们确保@
符号被使用。最后,我们要求字符串以a
和字母的形式结束。通常电子邮件地址的格式是something.extension
。最后,我们通过/i
来确保匹配器的大小写不敏感。
为了构建一个验证电子邮件地址模式的方法,我们可以使用以下代码:
def is_valid_email? email email =~ VALID_EMAIL_REGEX end
上述方法名为is_valid_email?
,我们将一个名为email
的参数传递给它。然后,我们将这个参数与VALID_EMAIL_REGEX
常量进行匹配,返回true
或false
。接下来,我们可以检查一些用例:
p is_valid_email?("jon.com") ? "Valid" : "Invalid" p is_valid_email?("jonkinney.com") ? "Valid" : "Invalid" p is_valid_email?("jon.k.com") ? "Valid" : "Invalid" p is_valid_email?("jon") ? "Valid" : "Invalid"
执行这段代码应该输出:
"Valid" "Invalid" "Valid" "Invalid"
第一个和第三个电子邮件地址是有效的,因为它们与模式匹配,而第二个和第四个是无效的。
在三元运算符中不要忘记在参数周围加上括号。
正则表达式用于验证电子邮件地址的格式。在Ruby中,可以使用内置的URI::MailTo::EMAIL_REGEXP来进行电子邮件地址的验证。只需在模型中添加validates_format_of :user_email, with: URI::MailTo::EMAIL_REGEXP
即可。
如果希望进一步完善正则表达式,可以使用其他的正则表达式作为替代。以下是一个建议:
suggestion = /^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$/ validates_format_of :user_email, with: suggestion
以上是关于在Ruby中使用正则表达式验证电子邮件地址的问题的原因和解决方法。
在Ruby中,可以使用mail gem来根据RFC2822解析任何字符串,例如:
def valid_email( value ) begin return false if value == '' parsed = Mail::Address.new( value ) return parsed.address == value && parsed.local != parsed.address rescue Mail::Field::ParseError return false end end
上述代码首先检查电子邮件是否已提供,即对于空地址返回false
,还检查地址是否包含域名。mail gem已经包含在Rails中,因此您可以在应用程序的任何地方使用上述代码。
您是否知道任何用于相同目的的正则表达式呢?mail gem实际上根据RFC解析电子邮件,并且非常严格。如果您只需要进行一些基本的格式检查,可以使用Authlogic gem中使用的正则表达式,可以在https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/regex.rb上找到。