在Swift中验证电子邮件地址的最佳做法是什么?
我正在寻找最简单和最干净的方法来验证电子邮件(字符串)在Swift中。在Objective-C中,我使用了这种方法,但是如果我将它重写到Swift中,创建谓词时出现错误“无法解析格式字符串”。在Swift中验证电子邮件地址的最佳做法是什么?
- (BOOL) validateEmail: (NSString *) candidate {
NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:candidate];
}
看起来很简单。如果你的Swift转换有问题,如果看看你实际尝试过的东西可能会有所帮助。
这个工作对我来说:
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(candidate)
}
validateEmail("[email protected]") // true
validateEmail("[email protected]@google.com") // false
那么差异只在于我们如何将emailRegex插入到谓词中...... func isEmailValid(strEmail:String) - > Bool {var _EmailRegex =“[A-Z0-9a-z \\ ._% - ] + @([A-Za-z0-9 - ] + \\。)+ [A-Za-z] {2,6}“ var predicateEmail = NSPredicate(格式:”SELF MATCHES \(strEmailRegex)“ ) return predicateEmail.evaluateWithObject(strEmail) } – 2014-10-03 14:35:57
右键 - 这不起作用,因为您尚未向NSPredicate初始化程序提供任何格式参数。您仍然需要使用'%@'并通过最后的可变参数列表传递它。 – 2014-10-03 14:37:36
谢谢!我现在得到它 - 我只需要看看NSPredicate的init函数稍微长一点:) – 2014-10-03 14:43:12
class func isValidEmail(email:String)-> Bool
{
let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
var emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
let result = emailTest!.evaluateWithObject(email)
return result
}
克雷格斯回答的作品,如果有人正在努力实现它,在这里它与textFieldDidEndEditing FUNC调用它。 (UITextFieldDelegate需要)
func textFieldDidEndEditing(textField: UITextField)
{
if validateEmail(emailAddress.text)
{
println("valid")
}
else
{
println("NOT valid")
}
}
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(candidate)
}
extension String
{
func isEmail() -> Bool
{
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(self)
}
}
这里是正在为每一个电子邮件域扩展名。
例:.com
,.co.uk
,.co.in
等
extension String {
func isValidEmail() -> Bool {
let emailRegEx = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-][email protected][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])?)*$"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluateWithObject(self)
}
}
只是要在我的两分钱这里扔,打你一个曲线球:
你真的想验证你的电子邮件地址吗?
参见本blogpost这表明所有你需要做检查的电子邮件是有效的就是检查它有一个@
符号,或最多一@
其次在某些时候由.
:
/[email protected]+\..+/i
雨燕3.0的版本
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: candidate)
}
validateEmail("[email protected]") // true
validateEmail("[email protected]@google.com") // false
func isValidEmail(testStr: String) -> Bool {
print("valid Email-ID: \(testStr)")
let emailRegEx = "[A-Za-z0-9_%+-][email protected][A-Za-z0-9._]+\\.[A-Za-z]{2,}"
let emailTest = NSPredicate(format: "SELF MATCHES %@",emailRegEx)
return emailTest.evaluateWithObject(testStr)
}
func textFieldDidEndEditing(textField: UITextField) {
if isValidEmail(txt_EmailID.text!){
print("Email is Valid")
}else{
print("Email is not valid")
}
}
// creat done button outlet
@IBAction func btn_Done(sender: AnyObject) {
validated()
}
普莱斯e总是发布你的代码不工作。 – 2014-10-03 14:35:01