使用NSFormatter进行电子邮件验证

问题描述

我知道这可能是一个无效的问题。

对于电子邮件验证,我将使用正则表达式和NSPredicate。但是有人问我,因此试图征求你的意见。

如何使用NSFormatter验证电子邮件地址的NSTextField

我可以不用正则表达式来使用NSFormatter。但是只是想知道使用NSFormatter可以做到这一点吗?

如果是,怎么办?任何指导都会有所帮助。

解决方法

但是只是想知道使用NSFormatter可以做到这一点吗?

NSFormatter旨在被子类化,每个子类对应于一种特定类型的数据。这就是为什么我们有NSDateFormatterNSNumberFormatterNSMassFormatter

据我所知,Foundation框架没有提供专门用于电子邮件地址的NSFormatter子类,因此您需要找到别人写的或自己写的子类。看一下NSPersonNameComponentsFormatter,以了解您的EmailFormatter类如何工作的示例。有一个辅助NSPersonNameComponents类,其中包含全名的各个部分,格式化程序具有类似-stringFromPersonNameComponents:-personNameComponentsFromString:之类的方法,可以在组件对象和字符串之间进行转换。

您可能想要做类似的事情:创建一个可以包含电子邮件地址各个部分的类或结构,然后编写将该类的实例与字符串进行相互转换的方法。要使用格式化程序来验证以字符串形式给出的地址,请使用格式化程序将字符串转换为组件对象,然后检查该对象中所有必填字段是否具有合法值。

,

使用此代码

  extension String {
// This code is for checking if url is valid,to do email,you need to change the `regEx`
        var validURL: Bool {
            get {
                let regEx = "((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?"
                let predicate = NSPredicate(format: "SELF MATCHES %@",argumentArray: [regEx])
                return predicate.evaluate(with: self)
            }
        }
    }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...