检查如果字符串包含允许的内容

问题描述:

在用户名以外的任何字符 - 我想只允许字母数字字符,并且我想其他10个UTF8字符。什么是适当的方式来做到这一点? UTF8会成为preg函数的问题,我需要使用另一种方法吗?检查如果字符串包含允许的内容

谢谢

+1

当你尝试它有用吗? – 2011-04-25 01:41:51

recently asked如何使这只是做正确的事,并了解到,这是相当多刺把一切完全正确。

如果你不能得到/\w/u在Unicode上适合你,它主要是/[\pL\pM\p{Nd}\p{Nl}\p{Pc}]/u

Preg是你最好的选择。做一些这样的事情,替换随机的日文字符,我用你选择允许的字符。

if (preg_match('/[\x{0030}-\x{0039}\x{0041}-\x{005A}\x{0061}\-u007A]+/u', $subject)) { 
return true; 
} 
return false; 

如果需要使用正则表达式的表达式,然后我建议使用RegexBuddy,你可以在regexbuddy.com

+0

但是,这不是Unicode的字母,你知道。 'a-z'是这些代码异味错误之一。 – tchrist 2011-04-25 02:23:29

+0

对不起。以上是编辑使用Unicode字符映射。这是[0-9A-Za-z] +的Unicode等价物,您需要为所需的字符添加正确的映射。 – AWinter 2011-04-25 06:56:25

得到适当的Unicode支持(包括适当的情况下,意识)帮助您需要使用'/u'修改IIRC 。但是,但是,但是:要知道,大多数其他 PHP函数将把PHP字符串作为字节字符串(不是字符串),这意味着如果你在做喜欢的东西stripos()你会得到字节偏移量指标,而不是字符索引,并且它们不能可靠地用于畸形的UTF-8(因为它们匹配字节序列而不是字符序列)。

另外请注意,UTF-8文字可能不是一个好主意,如果你需要在某个地方运行该脚本不使用UTF-8作为系统区域设置(Windows)中。