检查字符串是否与正则表达式模式Swift 2.2匹配

时间:2016-07-04 22:07:20

标签: regex swift swift2

我有这个正则表达式(([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中的正则表达式匹配?

1 个答案:

答案 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)中给出的一些示例,您的正则表达式将失败。