我试图检查字符串,如果它包含单引号或双引号
我尝试使用以下代码但是当我测试并在文本字段中输入单引号或双引号时,它就像没有引号一样传递。
var usernameSQL = username.text?.contains("\'") as! Bool || username.text?.contains("\"") as! Bool
guard !usernameSQL else {
let alertVC = UIAlertController(title: "Invlalid symbols", message: "(') and (\") symbols are not allowed", preferredStyle: .alert)
alertVC.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.show(alertVC, sender: nil)
return
}
print("passed")
我得到的是“通过”打印而不是警告“无效符号”。
提前致谢。
我觉得你过于复杂了。
使用这个小型重构器可以轻松实现相同的结果。
if let textValue = username.text {
if textValue.contains("\'") || textValue.contains("\"") {
print("Show Alert")
} else {
print("Passed")
}
} else {
print("username.text is nil do something or just ignore")
}
希望能帮助到你。
更智能的解决方案是使用CharacterSet
和rangeOfCharacter(from:
。好处是可选的不需要打开。
如果没有引号,则表达式返回nil
并传递guard
。
let quoteSet = CharacterSet(charactersIn: "\'\"")
guard username.text?.rangeOfCharacter(from: quoteSet) == nil else { ...
但是我会接受Larme的建议并使用允许的字符创建字符集。