本文翻译自:How to validate an e-mail address in swift?

Does anyone know how to validate an e-mail address in Swift? 有谁知道如何在Swift中验证电子邮件地址? I found this code: 我发现此代码:

- (BOOL) validEmail:(NSString*) emailString {if([emailString length]==0){return NO;}NSString *regExPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];NSLog(@"%i", regExMatches);if (regExMatches == 0) {return NO;} else {return YES;}
}

but I can't translate it to Swift. 但我无法将其翻译为Swift。


#1楼

参考:https://stackoom.com/question/1isCQ/如何快速验证电子邮件地址


#2楼

I would use NSPredicate : 我会用NSPredicate

 func isValidEmail(emailStr:String) -> Bool {        let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)return emailPred.evaluate(with: emailStr)
}

for versions of Swift earlier than 3.0: 对于低于3.0的Swift版本:

 func isValidEmail(emailStr:String) -> Bool {let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)return emailPred.evaluate(with: emailStr)
}

for versions of Swift earlier than 1.2: 对于低于1.2的Swift版本:

 class func isValidEmail(emailStr:String) -> Bool {let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"if let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx) {return emailPred.evaluateWithObject(emailStr)}return false
}

#3楼

Here is a method based on rangeOfString : 这是一个基于rangeOfString的方法:

class func isValidEmail(testStr:String) -> Bool {let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"let range = testStr.rangeOfString(emailRegEx, options:.RegularExpressionSearch)let result = range != nil ? true : falsereturn result
}

Note: updated TLD length. 注意:更新的TLD长度。

Here is the definitive RegEx for email as per RFC 5322, note that this is best not used because it only checks the basic syntax of email addresses and does not check is the top level domain exists. 这是根据RFC 5322定义的电子邮件正则表达式,请注意,最好不要使用它,因为它仅检查电子邮件地址的基本语法,而不检查是否存在顶级域。

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|  "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|  \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
@ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|  \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|  \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

See Regular-Expressions.info for more complete information on email RegExs. 见Regular-Expressions.info有关电子邮件RegExs更全面的信息。

Note that no escaping as required by a language such as Objective-C or Swift. 请注意,没有像Objective-C或Swift这样的语言必须进行转义。


#4楼

As a String class extension 作为String类扩展

SWIFT 4 SWIFT 4

extension String {func isValidEmail() -> Bool {// here, `try!` will always succeed because the pattern is validlet regex = try! NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", options: .caseInsensitive)return regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil}
}

Usage 用法

if "rdfsdsfsdfsd".isValidEmail() {}

#5楼

This is the updated version for Swift 2.0 - 2.2 这是Swift 2.0-2.2的更新版本

 var isEmail: Bool {do {let regex = try NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", options: .CaseInsensitive)return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil} catch {return false}
}

#6楼

Here is a fuse of the two most up-voted answer with the correct regex: a String extension using predicate so you can call string.isEmail 这是正确答案的两个最受好评的答案的融合:使用谓词的String扩展,因此您可以调用string.isEmail

    extension String {var isEmail: Bool {let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}"            let emailTest  = NSPredicate(format:"SELF MATCHES %@", emailRegEx)return emailTest.evaluateWithObject(self)}}

如何快速验证电子邮件地址?相关推荐

  1. php验证电子邮件,如何在PHP中验证电子邮件地址

    冉冉说 检查电子邮件地址是否格式良好的最简单和最安全的方法是使用filter_var()职能:if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { //  ...

  2. 如何在JavaScript中验证电子邮件地址

    如何在JavaScript中验证电子邮件地址? #1楼 与squirtle相比 ,这是一个复杂的解决方案,但是在正确验证电子邮件方面做得非常出色: function isEmail(email) { ...

  3. POSIX正则表达式 验证电子邮件地址

    我们最经常遇到的验证,就是电子邮件地址验证.网站上常见.各种网页脚本也都常用"正则表达式"(regular expression)对我们输入的电子邮件地址进行验证,判断是否合法.有 ...

  4. 我应该如何验证电子邮件地址?

    本文翻译自:How should I validate an e-mail address? What's a good technique for validating an e-mail addr ...

  5. html5验证电子邮件地址,大家都知道如何吗?

    一个新值类型属性是电子邮件.使用这种类型的字段而不是一般的文本字段浏览器使用正则表达式来检查用户已经事实上输入一个电子邮件地址.这是否意味着用户不能输入一个虚假的电子邮件地址吗?没有.但你不必担心用户 ...

  6. 如何使用正则表达式验证电子邮件地址

    电子邮件正则表达式模式 ^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$ ...

  7. python使用正则验证电子邮件_如何使用正则表达式验证电子邮件地址?

    在完全RFC 822标准的正则表达式是低效的和模糊的,因为它的长度.幸运的是,RFC 822被取代了两次,目前的电子邮件地址规范是RFC 5322.RFC 5322导致正则表达式,如果研究几分钟并且对 ...

  8. php 邮件验证_PHP程序来验证电子邮件地址

    php 邮件验证 Suppose there is a form floating where every user has to fill his/her email ID. It might ha ...

  9. 3种在JavaScript中验证电子邮件地址的方法

    来源 | http://www.fly63.com/ 如何使用JavaScript验证email的正确性?今天这个内容将做一个小小的总结,希望对你有所帮助. 方式一:简单验证 对于想要以以下形式进行真 ...

最新文章

  1. 转PET灌装机的完善
  2. [待总结]各种中文乱码分析与处理:数据库、eclipse、linux to windows、web应用
  3. php框架laravel:数据库建立:artisan
  4. 《iOS应用逆向工程(第2版)》高清电子书 PDF
  5. 手机连接投影机的步骤_家用投影仪如何安装 家用投影仪安装方法【步骤详解】...
  6. 全奖博士招生,荷兰根特大学 ​IDLab 实验室,手语手势识别方向
  7. 技巧 | 数据有缺失值情况下的一个处理方法
  8. 如何编写内联if语句用于打印?
  9. AWK学习笔记五:可执行AWK程序
  10. java生成16位唯一性的订单号
  11. 华为设备MSTP配置命令
  12. 〖Python APP 自动化测试实战篇④〗- 通过 appium 驱动夜神模拟器完成第一个自动化脚本 - 查看通讯录
  13. 可视为线性回归的曲线回归(R语言)
  14. 【Beta】Scrum Meeting 7 与助教谈话
  15. 数据驱动 - ddt
  16. Java毕设答辩会问些什么?
  17. 权限设计,设计模型分析(DAC,MAC,RBAC,ABAC) 之 RBAC
  18. TFmini Plus在开源飞控PX4上的应用
  19. 手机模拟器之争:Genimotion在左,海马玩在右
  20. Oracle AWR报告详细分析

热门文章

  1. 强一致性、弱一致性、最终一致性
  2. js创建对象时,属性加引号与不加引号的区别(转)
  3. 部署Nginx+Keepalived
  4. javascript 容错处理代码【屏蔽js错误】
  5. 经典排序算法-MFC实现之3:冒泡排序
  6. 可在网络不好的环境下运行的ENet示例程序
  7. 第15节 三个败家子(15)—— 总被死后累
  8. 使用 Fabric 自动化部署 Django 项目
  9. 2018年线程与多线程面试必知必会内容
  10. Konckout第五个实例:各种事件绑定