2016-07-04 64 views
0

我有这个正则表达式(([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6})的电子邮件地址,我试图做一个函数来检查一个字符串是否与它对应。 我已经尝试过检查字符串是否匹配正则表达式模式Swift 2.2

func matches() -> Bool 
{ 
    let emailRegex : String = "([A-Z0-9a-z._%+-][email protected][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._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 
    return self.rangeOfStringrangeOfString(emailRegex, options: .RegularExpressionSearch) != nil 
} 

,但他们要么给我一个运行时错误(与NSPredicate),或者说,每单的电子邮件地址是(与.rangeOfString)

我无效在this link上也发现了一个正则表达式类声明,它是用Swift 1.x编写的(但我可以很容易地将它转换为Swift 2.x来构建它),但它也不起作用。

我没有找到一个工作或可以理解的方法上下搜索(我对Swift有点新),所以我的问题是:如何检查字符串是否与Swift 2中的正则表达式匹配?

回答

0

在正则表达式开始处似乎有一个(有点奇怪的)左括号。删除,看看会发生什么:

let emailRegex : String = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 

适合我。


注意:使用正则表达式验证电子邮件通常是一个坏主意。尝试发送电子邮件并查看出现什么错误会更好。
例如,对于Wikipedia page on email addresses(特别是带引号的字符串,如"[email protected]"@example.com)给出的一些示例,您的正则表达式将失败。

+0

甜耶稣它的作品,**非常感谢**。显然,我在Google上挣扎的所有时间都是完全浪费时间,这要感谢我的愚蠢 – NOVA99

+0

我无法发送验证电子邮件,原因有两个:1)它是一个地址簿2)它只是一个命令行工具... – NOVA99

+0

@ NOVA99命令行工具可以完美地发送电子邮件('/ usr/bin/mail'就是一个经典的例子)。但是,考虑到地址簿,您可以考虑将电子邮件正确性的责任交给用户。例如,你是否还要检查街道地址(特别是国际地址)的有效性? – Evert

相关问题