if self.tf.text?.characters.count > 4 { Tool.alertUser("昵称最多4个汉字,或者8个字符;数字,字母占一个字符,汉字占2个字符") return }
汉字最多4个,但是有人用英文名,只有4个字母明显不够,这咋办?
光阴似箭催人老,日月如移越少年。
var length = 0 for char in nickNameTF.text!.characters { // 判断是否中文,是中文+2 ,不是+1 length += "\(char)".lengthOfBytesUsingEncoding(NSUTF8StringEncoding) == 3 ? 2 : 1 } if length > 8 { Tool.alertUser("字数限制为4个汉字或者8个字符;汉字算2个字符,字母、数字算1个字符") return }
首先,一个汉字并不是一定占用 2 个字节。
其次,你可以尝试通过 String().utf8.count 控制长度。
String().utf8.count
最后,你也可以通过正则表达式来控制。
我见过好多输入框都是按字节计数的。
我感觉题主的问题应该这样解决,虽然汉字可能占3个字符,但是我们"认为"是两个字符,目的是控制中英文昵称长度,而不是为了utf8长度所以应该判断if( a > 0x4e00 && a < 0x9fff){那么是中文,算两个占字符}但是目前都不这么费力,直接统一限制一个值就好了,比如10就不错
首先,一个汉字并不是一定占用 2 个字节。
其次,你可以尝试通过
String().utf8.count
控制长度。最后,你也可以通过正则表达式来控制。
我见过好多输入框都是按字节计数的。
我感觉题主的问题应该这样解决,虽然汉字可能占3个字符,但是我们"认为"是两个字符,目的是控制中英文昵称长度,而不是为了utf8长度
所以应该判断if( a > 0x4e00 && a < 0x9fff){那么是中文,算两个占字符}
但是目前都不这么费力,直接统一限制一个值就好了,比如10就不错