在用户名中 - 我想只允许使用字母数字字符和其他10个我想要的UTF8字符。这样做的正确方法是什么? UTF8是preg函数的问题吗?我需要使用另一种方法吗?
由于
答案 0 :(得分:1)
我recently asked如何制作这个Just Do The Right Thing,并了解到让一切都做得恰到好处。
如果你无法让/\w/u
在你的Unicode上正常工作,那么它基本上就像/[\pL\pM\p{Nd}\p{Nl}\p{Pc}]/u
。
答案 1 :(得分:0)
Preg是你最好的选择。做这样的事情,用我选择的允许字符替换随机日文字符。
if (preg_match('/[\x{0030}-\x{0039}\x{0041}-\x{005A}\x{0061}\-u007A]+/u', $subject)) {
return true;
}
return false;
如果您需要有关正则表达式表达式的帮助,那么我推荐regexbuddy,您可以在regexbuddy.com获取
答案 2 :(得分:0)
要获得正确的Unicode支持(包括正确的案例感知),您需要使用'/u'
修饰符IIRC。但是,但是,但是:请注意,大多数其他 PHP函数会将PHP字符串视为字节字符串(而非字符串),这意味着如果您正在执行stripos()
之类的操作,您将获得字节索引中的偏移而不是字符索引,它们对于格式错误的UTF-8不能可靠地工作(因为它们匹配字节序列而不是字符序列)。
另请注意,如果您需要在不使用UTF-8作为系统区域设置(Windows)的地方运行此脚本,则UTF-8文字可能不是一个好主意。