我有这个正则表达式(([A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}
)用于电子邮件地址,我正在尝试创建一个函数来检查字符串是否与之对应。
我已经尝试了
func matches() -> Bool
{
let emailRegex : String = "([A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(self) //I use self because this is an extension of String
}
和
func matches() -> Bool
{
let emailRegex : String = "([A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return self.rangeOfStringrangeOfString(emailRegex, options: .RegularExpressionSearch) != nil
}
但他们要么给我一个运行时错误(使用NSPredicate),要么说每个电子邮件地址都无效(使用.rangeOfString)
我在this link找到了一个用Swift 1.x编写的Regex类声明(但是我可以很容易地将它转换为Swift 2.x来构建它),但它也不起作用。
我上下搜索而没有找到一个有效或可理解的方法(我对Swift有点新鲜)所以我的问题是:如何检查字符串是否与Swift 2中的正则表达式匹配?
答案 0 :(得分:0)
在正则表达式的开头似乎有一个(有些奇怪的)左括号。删除它,看看会发生什么:
let emailRegex : String = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
适合我。
注意:使用正则表达式验证电子邮件通常是个坏主意。最好尝试发送电子邮件,看看你得到了什么错误
例如,对于Wikipedia page on email addresses(特别是带引号的字符串,例如"very.unusual.@.unusual.com"@example.com
)中给出的一些示例,您的正则表达式将失败。