Как ограничить символ для имени пользователя в Swift - PullRequest
0 голосов
/ 30 июня 2019

мне нужно ограничить символ имени пользователя в моем быстром коде.

Username могут использовать только эти символы "abcdefghijklmnopqrstuvwxyz._1234567890".

Пожалуйста, прости меня, если я нуб, я не знаюне имею опыта программирования.Все еще учимся.

Ниже приведен быстрый код, какую часть мне нужно отредактировать?

// MARK: - SIGNUP BUTTON
@IBAction func signupButt(_ sender: AnyObject) {
    dismissKeyboard()

    // You acepted the TOS
    if tosAccepted {

        if usernameTxt.text == "" || passwordTxt.text == "" || emailTxt.text == "" || fullnameTxt.text == "" {
            simpleAlert("You must fill all fields to sign up on \(APP_NAME)")
            self.hideHUD()

        } else {
            showHUD("Please wait...")

            let userForSignUp = PFUser()
            userForSignUp.username = usernameTxt.text!.lowercased()
            userForSignUp.password = passwordTxt.text
            userForSignUp.email = emailTxt.text
            userForSignUp[USER_FULLNAME] = fullnameTxt.text
            userForSignUp[USER_IS_REPORTED] = false
            let hasBlocked = [String]()
            userForSignUp[USER_HAS_BLOCKED] = hasBlocked

            // Save Avatar
            let imageData = avatarImg.image!.jpegData(compressionQuality: 1.0)
            let imageFile = PFFile(name:"avatar.jpg", data:imageData!)
            userForSignUp[USER_AVATAR] = imageFile

            userForSignUp.signUpInBackground { (succeeded, error) -> Void in
                if error == nil {
                    self.hideHUD()

                    let alert = UIAlertController(title: APP_NAME,
                                                  message: "We have sent you an email that contains a link - you must click this link to verify your email and go back here to login.",
                                                  preferredStyle: .alert)

                    // Logout and Go back to Login screen
                    let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
                        PFUser.logOutInBackground(block: { (error) in
                            self.dismiss(animated: false, completion: nil)
                        })
                    })

                    alert.addAction(ok)
                    self.present(alert, animated: true, completion: nil)


                    // ERROR
                } else {
                    self.simpleAlert("\(error!.localizedDescription)")
                    self.hideHUD()
                }}
        }

1 Ответ

3 голосов
/ 30 июня 2019

Вы можете использовать регулярные выражения для этого, проверьте код ниже.

let usernameRegex = "^[a-zA-Z0-9]{4,10}$"
let usernameTest = NSPredicate(format:"SELF MATCHES %@", usernameRegex)
print(usernameTest.evaluate(with: "asAZ")) // boolen

Вы даже можете создать extension из него вот так

extension String {
    func isValidUserName() -> Bool{
        let usernameRegex = "^[a-zA-Z0-9]{4,10}$" // your regex
        let usernameTest = NSPredicate(format:"SELF MATCHES %@", usernameRegex)
        return usernameTest.evaluate(with: self)
    }

}

использовать его вот так

yourText.isValidUserName() // return true or false . 

Вы можете гуглить любой видregex, чтобы соответствовать вашему случаю и будущим, я даже рекомендую сохранить эти regex в перечислении и создать функцию, которая принимает эти перечисления и проверяет, посмотрите на это как подсказку

  enum ValidationRgex: String {
    case username = "^[a-zA-Z0-9]{4,10}$"
}

extension String {
    func isValid(_ regex: ValidationRgex) -> Bool{
        let usernameRegex =  regex.rawValue
        let usernameTest = NSPredicate(format:"SELF MATCHES %@", usernameRegex)
        return usernameTest.evaluate(with: self)
    }
}

"MyText".isValid(.username) // usage 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...