Ios TextField是电话号码还是电子邮件格式?
我有一个忘记密码的文本字段,在这里用户输入手机号码或电子邮件,然后我们发送OTP到那个 我试图用我的代码验证该文本字段,但它不起作用,任何人都可以给出一些想法,请用下面的代码查找我的代码Ios TextField是电话号码还是电子邮件格式?,ios,swift,validation,Ios,Swift,Validation,我有一个忘记密码的文本字段,在这里用户输入手机号码或电子邮件,然后我们发送OTP到那个 我试图用我的代码验证该文本字段,但它不起作用,任何人都可以给出一些想法,请用下面的代码查找我的代码 extension String { func isValidEmail() -> Bool { // here, `try!` will always succeed because the pattern is valid let regex = try! NS
extension String {
func isValidEmail() -> Bool {
// here, `try!` will always succeed because the pattern is valid
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.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
}
// vrify Valid PhoneNumber or Not
func isValidPhone() -> Bool {
let phoneRegex = "^[0-9]{10}$";
let valid = NSPredicate(format: "SELF MATCHES %@", phoneRegex).evaluate(with: phoneRegex)
return valid
}
}
它需要对mailid或电话号码格式有效
if emaiTF.text == "" {
print("Enter either valid phone or email")
}else if let validphone = emaiTF.text, validphone.isValidPhone() || validphone.isValidEmail() {
print("Enter either valid phone or email")
}else{
forGotPasswordApi()
}
我的验证方法如下
extension String {
func isValidEmail() -> Bool {
// here, `try!` will always succeed because the pattern is valid
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.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
}
// vrify Valid PhoneNumber or Not
func isValidPhone() -> Bool {
let phoneRegex = "^[0-9]{10}$";
let valid = NSPredicate(format: "SELF MATCHES %@", phoneRegex).evaluate(with: phoneRegex)
return valid
}
}
电话号码验证
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let aSet = NSCharacterSet(charactersIn:"0123456789").inverted
let compSepByCharInSet = string.components(separatedBy: aSet)
let numberFiltered = compSepByCharInSet.joined(separator: "")
guard let text = textField.text else { return true }
let count = text.count + string.count - range.length
return string == numberFiltered && count <= 10
}
func textField(textField:UITextField,shouldChangeCharacters范围:NSRange,replacementString:string)->Bool{
设aSet=NSCharacterSet(charactersIn:“0123456789”)。反转
让compSepByCharInSet=string.components(separatedBy:aSet)
让numberFiltered=compSepByCharInSet.joined(分隔符:“”)
guard let text=textField.text else{return true}
让计数=text.count+string.count-range.length
return string==numberFiltered&&count这似乎是您的输出验证中的问题。请按照以下方式修改代码以使其正常工作,请验证
extension ViewController {
func checkValidation() {
if txtUserName.text == "" {
print("Enter either valid phone or email 1")
} else if let validphone = txtUserName.text, validphone.isValidPhone() || validphone.isValidEmail() {
print("Success")
forGotPasswordApi()
}else{
print("Enter either valid phone or email 2")
}
}
}
extension String {
func isValidEmail() -> Bool {
// here, `try!` will always succeed because the pattern is valid
let regex = try! NSRegularExpression(pattern: "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,3})$", options: .caseInsensitive)
let valid = regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
print("Email validation \(valid)")
return valid
}
// vrify Valid PhoneNumber or Not
func isValidPhone() -> Bool {
let regex = try! NSRegularExpression(pattern: "^[0-9]\\d{9}$", options: .caseInsensitive)
let valid = regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
print("Mobile validation \(valid)")
return valid
}
}
电子邮件验证
用下面的方法传递字符串
下面的方法将返回Bool值YES或NO
方法:
func isValidEmail(testStr:String) -> Bool {
// print("validate calendar: \(testStr)")
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: testStr)
}
用法:
if isValidEmail(testStr: emailTxtFld.text!) == True {
print("Valid");
}
else {
print("In Valid");
}
我通过更改验证检查更新了您提供的代码。我认为validInput.isValidPhone()| | validInput.isValidEmail()
在您的代码中处理不正确
// Check if any input is entered and not empty string
guard let validInput = emaiTF.text, validInput != "" else {
print("Enter either valid phone or email")
return
}
// Check if entered value is valid or not
if validInput.isValidPhone() || validInput.isValidEmail() {
forGotPasswordApi()
} else {
print("Enter either valid phone or email")
}
我的确认是:
extension String {
var isValidEmail: Bool {
return NSPredicate(format: "SELF MATCHES %@", "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}").evaluate(with: self)
}
var numberValidation: Bool {
return NSPredicate(format: "SELF MATCHES %@", "^(?=.*[0-9]).{10}$").evaluate(with: self)
}
}
我的代码用于检查给定输入
if mailTextField.text!.isValidEmail {
print("u have entered correct mail format")
}
if phonenumber.text!.numberValidation {
print("mobile number in correct format")
}
OP对电话号码或电子邮件使用相同的字段。您不能简单地从文本字段内容中丢弃任何非数字。顺便说一句,您为什么不简单地筛选您不需要的字符?string.filter{“0”…“9”~=$0}
另一点是连接(分隔符:“”
没有意义,只需使用连接()
UITextField
text属性永远不会返回nil
。它的默认值是空字符串。您的守卫永远不会进入闭包。UITextField
text属性永远不会返回nil
。它的默认值是空字符串。顺便说一句,您可以简单地使用名为uikeyinport
的属性hasText
检查字段是否为空或not@LeoDabus我只想添加与提问者相同的检查。guard emaiTF.hasText else{
和if emaiTF.text!.isValidPhone()| | emaiTF.text!.isValidEmail(){
isValidEmail方法接受一个非可选字符串。调用该方法时需要打开字符串emailTxtFld.text
。顺便说一句==true
是多余的。如果isValidEmail(testStr:emailTxtFld.text!){
添加2个答案的原因是什么?您可以更新以前添加的答案。True
它不是一个类型。再次==True
是冗余的。您甚至没有检查字符串是否是有效的电话号码。我没有明白您的意思。您能再次清楚地告诉我(作为新的投稿人),如果你不是指?如果你没有得到答案,为什么还要编辑答案并添加电话号码条件?顺便说一句,我已经在其他帖子上发表了评论。UITextField text属性永远不会返回nil。它的默认值是一个空字符串。如果mailTextField.text!.isValidEmail,你只需强制展开它的结果{
当然,谢谢你对我的评论做出的宝贵贡献。==true
是多余的。如果你的字符串不再是可选的,你可以省略它。我已经在下面的答案中修改并添加了你的代码补丁。请检查它是否对你有效,然后接受它,这样其他人可以从中受益!!