阻止其他类型的键盘
Blocking other type keyboards
我有一个文本字段,检查是在 shouldChangeCharactersIn 函数中完成的。
这在大多数情况下都运行良好。
首先我有一个允许字符的字符集:
// Check characters
allowedCharacters = CharacterSet.decimalDigits.union(.letters)
allowedCharacters = allowedCharacters?.union(CharacterSet(charactersIn: "àÀáÁâÂãÃäÄåāÅæèÈéÉêÊëËìÌíÍîÎïÏòÒóÓöÖôÔõÕøØùÙúÚûÛüÜýÝÿçÇñÑ"))
allowedCharacters = allowedCharacters?.union(CharacterSet(charactersIn: " ,.:;@#%*+&_=<>!?\r\n'(){}[]/-"))
allowedCharacters 变量现在包含我希望在我的应用程序中允许的所有字符。 trimminCharacters 删除所有不在允许集中的字符。
guard string.trimmingCharacters(in: allowedCharacters!) == "" else { return false }
这似乎工作正常,但是当用户将键盘切换为土耳其语或中文时,可能会输入上面列表中没有的字符。
例如。来自土耳其语键盘:ğ 和 ş
而来自中文键盘:ㄎㄕ和ㄨ
我想阻止所有不在允许的 CharacterSet 中的字符。如何防止用户输入这些字符?
letters
字符集包括类别以“L”或“M”开头的每个 unicode 标量。
嗯,ğ和ş都属于Ll(小写字母)类别,而Bopomofo符号ㄎㄕ和ㄨ都属于Lo(其他字母)类别。所有这些字符都在 letter
字符集中!
请注意,decimalDigits
也是如此,它包括 Nd 类别中的所有内容。例如,这包括印度阿拉伯数字 ٠١٢٣٤٥٦٧٨٩。
您似乎想要允许一组相当具体的字符,所以您应该明确地写出来:
CharacterSet(charactersIn: "a"..."z") // assuming these chars are what you want
.union(.init(charactersIn: "A"..."Z"))
.union(.init(charactersIn: "0"..."9"))
.union(.init(charactersIn: "àÀáÁâÂãÃäÄåāÅæèÈéÉêÊëËìÌíÍîÎïÏòÒóÓöÖôÔõÕøØùÙúÚûÛüÜýÝÿçÇñÑ"))
.union(.init(charactersIn: " ,.:;@#%*+&_=<>!?\r\n'(){}[]/-"))
我有一个文本字段,检查是在 shouldChangeCharactersIn 函数中完成的。 这在大多数情况下都运行良好。
首先我有一个允许字符的字符集:
// Check characters
allowedCharacters = CharacterSet.decimalDigits.union(.letters)
allowedCharacters = allowedCharacters?.union(CharacterSet(charactersIn: "àÀáÁâÂãÃäÄåāÅæèÈéÉêÊëËìÌíÍîÎïÏòÒóÓöÖôÔõÕøØùÙúÚûÛüÜýÝÿçÇñÑ"))
allowedCharacters = allowedCharacters?.union(CharacterSet(charactersIn: " ,.:;@#%*+&_=<>!?\r\n'(){}[]/-"))
allowedCharacters 变量现在包含我希望在我的应用程序中允许的所有字符。 trimminCharacters 删除所有不在允许集中的字符。
guard string.trimmingCharacters(in: allowedCharacters!) == "" else { return false }
这似乎工作正常,但是当用户将键盘切换为土耳其语或中文时,可能会输入上面列表中没有的字符。 例如。来自土耳其语键盘:ğ 和 ş 而来自中文键盘:ㄎㄕ和ㄨ
我想阻止所有不在允许的 CharacterSet 中的字符。如何防止用户输入这些字符?
letters
字符集包括类别以“L”或“M”开头的每个 unicode 标量。
嗯,ğ和ş都属于Ll(小写字母)类别,而Bopomofo符号ㄎㄕ和ㄨ都属于Lo(其他字母)类别。所有这些字符都在 letter
字符集中!
请注意,decimalDigits
也是如此,它包括 Nd 类别中的所有内容。例如,这包括印度阿拉伯数字 ٠١٢٣٤٥٦٧٨٩。
您似乎想要允许一组相当具体的字符,所以您应该明确地写出来:
CharacterSet(charactersIn: "a"..."z") // assuming these chars are what you want
.union(.init(charactersIn: "A"..."Z"))
.union(.init(charactersIn: "0"..."9"))
.union(.init(charactersIn: "àÀáÁâÂãÃäÄåāÅæèÈéÉêÊëËìÌíÍîÎïÏòÒóÓöÖôÔõÕøØùÙúÚûÛüÜýÝÿçÇñÑ"))
.union(.init(charactersIn: " ,.:;@#%*+&_=<>!?\r\n'(){}[]/-"))