TextField или номер телефона или подтверждение формата электронной почты swift? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть одно текстовое поле для забытого пароля, здесь пользователь вводит либо номер мобильного телефона, либо адрес электронной почты, затем мы отправляем на него OTP.

Я пытаюсь проверить это текстовое поле с помощью моего кода, но он не работает Если кто-нибудь подскажет, пожалуйста, найдите мой код со следующим.

Он должен быть действителен для формата 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
    }
}

Ответы [ 5 ]

0 голосов
/ 20 февраля 2020

Моя проверка:

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 == true {
        print("u have entered correct mail format")
    }
if phonenumber.text!.numberValidation == true {
 print("mobile number in correct format")
}
0 голосов
/ 20 февраля 2020

Я немного обновил код, который вы указали, изменив проверки. Я думаю, что 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")
}
0 голосов
/ 20 февраля 2020

Кажется, проблема в проверке выходных данных. Чтобы ваш код работал следующим образом, пожалуйста, подтвердите.

  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
      }
  }
0 голосов
/ 20 февраля 2020

Подтверждение по электронной почте

Передайте вашу строку в следующем методе

Нижеуказанный метод вернет Bool Value 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");
 }
0 голосов
/ 20 февраля 2020

Проверка номера телефона

 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

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...