我可以强制用户在登录或注册屏幕中输入的内容只能是英文吗
can i force the user input in login or signup screen to be only in english
我打算强制用户输入只能是英文,这样如果用户注册,就可以阻止用户使用其他语言注册
我不知道 firebase 是否已经阻止了用户在看到的背后,但如果他们没有这样做,代码中是否有任何编程方式,或者这在开发应用程序时并不是一个真正的问题,我只是吓坏了
func textField(_ textFieldToChange: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textFieldToChange == username {
let characterSetNotAllowed = CharacterSet.whitespaces
if let _ = string.rangeOfCharacter(from:NSCharacterSet.uppercaseLetters) {
return false
}
if let _ = string.rangeOfCharacter(from: characterSetNotAllowed, options: .caseInsensitive) {
return false
} else {
return true
}
}
return true
}
您可以开始对 UITextField 进行子类化并添加编辑更改的目标 UIControlEvents 并在更改时过滤用户输入的字符串:
class EnglishLettersField: UITextField {
override func willMove(toSuperview newSuperview: UIView?) {
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
editingChanged(self)
}
@objc func editingChanged(_ textField: UITextField) {
guard let text = textField.text?.englishLetters else { return }
textField.text = text
}
}
extension CharacterSet {
// create your own set with the allowed characters to filter your string
static let englishLetters = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ")
}
extension String {
// create a computed property to separate the original text using the custom character set inverted, join it again and return it
var englishLetters: String {
return components(separatedBy: CharacterSet.englishLetters.inverted).joined()
}
}
您可以通过编程方式或使用界面生成器将其添加到您的视图中
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let englishLettersField = EnglishLettersField(frame: CGRect(origin: CGPoint(x: 50, y: 50), size: CGSize(width: 200, height: 50)))
view.addSubview(englishLettersField)
}
}
我打算强制用户输入只能是英文,这样如果用户注册,就可以阻止用户使用其他语言注册 我不知道 firebase 是否已经阻止了用户在看到的背后,但如果他们没有这样做,代码中是否有任何编程方式,或者这在开发应用程序时并不是一个真正的问题,我只是吓坏了
func textField(_ textFieldToChange: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textFieldToChange == username {
let characterSetNotAllowed = CharacterSet.whitespaces
if let _ = string.rangeOfCharacter(from:NSCharacterSet.uppercaseLetters) {
return false
}
if let _ = string.rangeOfCharacter(from: characterSetNotAllowed, options: .caseInsensitive) {
return false
} else {
return true
}
}
return true
}
您可以开始对 UITextField 进行子类化并添加编辑更改的目标 UIControlEvents 并在更改时过滤用户输入的字符串:
class EnglishLettersField: UITextField {
override func willMove(toSuperview newSuperview: UIView?) {
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
editingChanged(self)
}
@objc func editingChanged(_ textField: UITextField) {
guard let text = textField.text?.englishLetters else { return }
textField.text = text
}
}
extension CharacterSet {
// create your own set with the allowed characters to filter your string
static let englishLetters = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ")
}
extension String {
// create a computed property to separate the original text using the custom character set inverted, join it again and return it
var englishLetters: String {
return components(separatedBy: CharacterSet.englishLetters.inverted).joined()
}
}
您可以通过编程方式或使用界面生成器将其添加到您的视图中
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let englishLettersField = EnglishLettersField(frame: CGRect(origin: CGPoint(x: 50, y: 50), size: CGSize(width: 200, height: 50)))
view.addSubview(englishLettersField)
}
}