检查字符串是否包含除允许的字符以外的任何字符

时间:2011-04-25 01:35:10

标签: php regex

在用户名中 - 我想只允许使用字母数字字符和其他10个我想要的UTF8字符。这样做的正确方法是什么? UTF8是preg函数的问题吗?我需要使用另一种方法吗?

由于

3 个答案:

答案 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文字可能不是一个好主意。