ios Swift 中的电子邮件和电话验证
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27998409/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Email & Phone Validation in Swift
提问by Saikumar
i am using the following code for phone number validation. But i am getting the following error. I cant able to proceed further. Help us to take it forward.
我正在使用以下代码进行电话号码验证。但我收到以下错误。我无法进一步进行。帮助我们向前推进。
class PhoneNumberValidation: Validation {
let PHONE_REGEX = "^\d{3}-\d{3}-\d{4}$"
func validate(value: String) -> (Bool, ValidationErrorType) {
if let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX) {
if phoneTest.evaluateWithObject(value) {
return (true, .NoError)
}
return (false, .PhoneNumber)
}
return (false, .PhoneNumber)
}
}
Error : swift:15:28: Bound value in a conditional binding must be of Optional type
错误:swift:15:28:条件绑定中的绑定值必须是可选类型
回答by Kirit Modi
Yes your Error is below in XCode 6.1
是的,您的错误在 XCode 6.1 以下
This error is occurs because of if
conditional have to Bool
return type, but in Your if condition Return type is NSPredicate
so that you got error swift: Bound value in a conditional binding must be of Optional typeyou can solve as below.
发生此错误是因为if
条件必须Bool
返回类型,但在您的 if 条件返回类型中NSPredicate
,您会得到错误swift: Bound value in a conditional binding must be Optional type您可以按如下方式解决。
var phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
if phoneTest.evaluateWithObject(value) {
return (true, .NoError)
}
return (false, .PhoneNumber)
}
Email-Validations in Swift.
Swift 中的电子邮件验证。
func isValidEmail(testStr:String) -> Bool {
print("validate emilId: \(testStr)")
let emailRegEx = "^(?:(?:(?:(?: )*(?:(?:(?:\t| )*\r\n)?(?:\t| )+))+(?: )*)|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&'*+/=?^_'{|}~]+(?:\.[-A-Za-z0-9!#$%&'*+/=?^_'{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\[|\])|(?:\\(?:\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:[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])?)*)|(?:\[(?:(?:(?:(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))\.){3}(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))))|(?:(?:(?: )*[!-Z^-~])*(?: )*)|(?:[Vv][0-9A-Fa-f]+\.[-A-Za-z0-9._~!$&'()*+,;=:]+))\])))(?:(?:(?:(?: )*(?:(?:(?:\t| )*\r\n)?(?:\t| )+))+(?: )*)|(?: )+)?$"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
let result = emailTest.evaluateWithObject(testStr)
return result
}
Use of Email-validation:
电子邮件验证的使用:
if isValidEmail("[email protected]"){
print("Validate EmailID")
}
else{
print("invalide EmailID")
}
Phone-Number Validation in Swift
Swift 中的电话号码验证
func validate(value: String) -> Bool {
let PHONE_REGEX = "^\d{3}-\d{3}-\d{4}$"
let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
let result = phoneTest.evaluate(with: value)
return result
}
回答by Sourabh Sharma
Swift 3.0 to 5.0 Updated Solution:
Swift 3.0 到 5.0 更新解决方案:
//MARK:- Validation Extension
-
//MARK:- Validation Extension
——
extension String {
//To check text field or String is blank or not
var isBlank: Bool {
get {
let trimmed = trimmingCharacters(in: CharacterSet.whitespaces)
return trimmed.isEmpty
}
}
//Validate Email
var isEmail: Bool {
do {
let regex = try NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}", options: .caseInsensitive)
return regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.count)) != nil
} catch {
return false
}
}
var isAlphanumeric: Bool {
return !isEmpty && range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil
}
//validate Password
var isValidPassword: Bool {
do {
let regex = try NSRegularExpression(pattern: "^[a-zA-Z_0-9\-_,;.:#+*?=!§$%&/()@]+$", options: .caseInsensitive)
if(regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil){
if(self.characters.count>=6 && self.count<=20){
return true
}else{
return false
}
}else{
return false
}
} catch {
return false
}
}
}
use of Email Validation:
使用电子邮件验证:
if(txtEmail.isEmail){
}
Swift 2.0 Solution
Swift 2.0 解决方案
Paste these line anywhere in code.(or in your Constant file)
将这些行粘贴到代码中的任何位置。(或在您的常量文件中)
extension String {
//To check text field or String is blank or not
var isBlank: Bool {
get {
let trimmed = stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
return trimmed.isEmpty
}
}
//Validate Email
var isEmail: Bool {
do {
let regex = try NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}", options: .CaseInsensitive)
return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.count)) != nil
} catch {
return false
}
}
//validate PhoneNumber
var isPhoneNumber: Bool {
let charcter = NSCharacterSet(charactersInString: "+0123456789").invertedSet
var filtered:NSString!
let inputString:NSArray = self.componentsSeparatedByCharactersInSet(charcter)
filtered = inputString.componentsJoinedByString("")
return self == filtered
}
}
回答by EPage_Ed
Maybe a better phone validator in Swift 2:
也许 Swift 2 中更好的电话验证器:
extension String {
var isPhoneNumber: Bool {
do {
let detector = try NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue)
let matches = detector.matchesInString(self, options: [], range: NSMakeRange(0, self.characters.count))
if let res = matches.first {
return res.resultType == .PhoneNumber && res.range.location == 0 && res.range.length == self.characters.count
} else {
return false
}
} catch {
return false
}
}
}
回答by Hyman
Swift 4+
斯威夫特 4+
You can use simplified regex"^[6-9]\\d{9}$"
您可以使用简化的正则表达式"^[6-9]\\d{9}$"
^ #Match the beginning of the string
[6-9] #Match a 6, 7, 8 or 9
\d #Match a digit (0-9 and anything else that is a "digit" in the regex engine)
{9} #Repeat the previous "\d" 9 times (9 digits)
$ #Match the end of the string
Indian 10 Digit Mobile validation(can start with 6,7,8,9) -
印度 10 位移动验证(可以以 6、7、8、9 开头)-
extension String {
var isValidContact: Bool {
let phoneNumberRegex = "^[6-9]\d{9}$"
let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneNumberRegex)
let isValidPhone = phoneTest.evaluate(with: self)
return isValidPhone
}
}
Usage:-
用法:-
print("9292929292".isValidContact)//true
print("5454545454".isValidContact)//false
For email validation you can check this
对于电子邮件验证,您可以检查这个
回答by Rajesh Loganathan
Swift 4 & Swift 5:
斯威夫特 4 和斯威夫特 5:
func isValidPhone(phone: String) -> Bool {
let phoneRegex = "^[0-9+]{0,1}+[0-9]{5,16}$"
let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneRegex)
return phoneTest.evaluate(with: phone)
}
func isValidEmail(email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluate(with: email)
}
- +1994423565 - Valid
- ++1994423565 - Invalid
- 01994423565 - Valid
- 001994423565 - Valid
- [email protected] - Valid
- [email protected] - Invalid
- +1994423565 - 有效
- ++1994423565 - 无效
- 01994423565 - 有效
- 001994423565 - 有效
- [email protected] - 有效
- [email protected] - 无效
回答by Ronaldoh1
The following code works in xcode 6.3 beta
以下代码适用于 xcode 6.3 beta
func isValidEmail(testStr:String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"
let range = testStr.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
let result = range != nil ? true : false
return result
}
how to use it:
如何使用它:
Ex.
前任。
if isValidEmail(email.text) == false{
//your code here
}
回答by zumzum
Swift 3:
斯威夫特 3:
private func validate(phoneNumber: String) -> Bool {
let charcterSet = NSCharacterSet(charactersIn: "+0123456789").inverted
let inputString = phoneNumber.components(separatedBy: charcterSet)
let filtered = inputString.joined(separator: "")
return phoneNumber == filtered
}
回答by shiju86.v
Swift 3Validate Email
Swift 3验证电子邮件
class func validateEmail(email: String) -> Bool{
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: email)
}
Phone Number Validation
电话号码验证
class func validatePhoneNumber(value: String) -> Bool {
let PHONE_REGEX = "^\d{3}-\d{3}-\d{4}$"
let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
let result = phoneTest.evaluate(with: value)
return result
}
回答by ajay_nasa
Updated for Swift 3
为 Swift 3 更新
extension String {
var isPhoneNumber: Bool {
do {
let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue)
let matches = detector.matches(in: self, options: [], range: NSMakeRange(0, self.characters.count))
if let res = matches.first {
return res.resultType == .phoneNumber && res.range.location == 0 && res.range.length == self.characters.count
} else {
return false
}
} catch {
return false
}
}
}
回答by Gurjinder Singh
Swift 4.1.
斯威夫特 4.1。
func isValidPhone(phone: String) -> Bool {
let phoneRegex = "^[0-9]{6,14}$";
let valid = NSPredicate(format: "SELF MATCHES %@", phoneRegex).evaluate(with: phone)
return valid
}
func isValidEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
var valid = NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: candidate)
if valid {
valid = !candidate.contains("..")
}
return valid
}