Php 检查字符串是否包含除';允许

Php 检查字符串是否包含除';允许,php,regex,Php,Regex,在用户名中-我只允许字母数字字符和其他10个我想要的UTF8字符。这样做的正确方法是什么?UTF8对preg函数是否有问题?我是否需要使用其他方法 谢谢你,Preg是你最好的选择。像这样做,用你选择的允许字符替换我使用的随机日语字符 if (preg_match('/[\x{0030}-\x{0039}\x{0041}-\x{005A}\x{0061}\-u007A]+/u', $subject)) { return true; } return false; 如果您需要有关regex表达式的

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


谢谢你,Preg是你最好的选择。像这样做,用你选择的允许字符替换我使用的随机日语字符

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

如果您需要有关regex表达式的帮助,那么我建议您使用regexbuddy,您可以在regexbuddy.com上找到它。像这样做,用你选择的允许字符替换我使用的随机日语字符

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

如果您需要有关regex表达式的帮助,那么我建议您使用regexbuddy,您可以在regexbuddy.com上获得它。要获得正确的Unicode支持(包括正确的大小写意识),您需要使用
'/u'
修饰符IIRC。但是,但是,但是:请注意,大多数其他PHP函数都将PHP字符串视为字节字符串(而不是字符串),这意味着如果您正在执行
stripos()
之类的操作,您将获得字节索引中的偏移量,而不是字符索引,并且对于格式错误的UTF-8,它们将无法可靠地工作(因为它们匹配字节序列而不是字符序列)


另外,请注意,如果您需要在不使用UTF-8作为系统语言环境(Windows)的地方运行此脚本,UTF-8文本可能不是一个好主意。

以获得正确的Unicode支持(包括正确的大小写识别)您需要使用
'/u'
修饰符IIRC。但是,但是,但是:请注意,大多数其他PHP函数都将PHP字符串视为字节字符串(而不是字符串),这意味着如果您正在执行
stripos()之类的操作
您将获得字节索引中的偏移量,而不是字符索引,并且对于格式错误的UTF-8,它们无法可靠地工作(因为它们匹配字节序列而不是字符序列)

另外,请注意,如果您需要在不使用UTF-8作为系统语言环境(Windows)的地方运行此脚本,那么UTF-8文本可能不是一个好主意。

我了解了如何使其只做正确的事情,并了解到将所有事情都做对是相当棘手的

如果你不能让
/\w/u
在Unicode上正常工作,那就很像
/[\pL\pM\p{Nd}\p{Nl}\p{Pc}]/u

我知道如何做到这一点只是做正确的事情,并且知道要把每件事都做对是相当棘手的


如果您不能让
/\w/u
在Unicode上正常工作,那么它通常类似于
/[\pL\pM\p{Nd}\p{Nl}\p{Pc}]/u

你试过了吗?你试过了吗?但这不是字母的Unicode,你知道。
a-z
是那些代码臭味的错误之一。很抱歉。上面的内容被编辑为使用Unicode字符映射。这是[0-9A-Za-z]的Unicode等价物+您需要为所需的字符添加正确的映射。但这不是字母的Unicode,您知道。
a-z
是其中一个代码臭味错误。对此表示抱歉。以上内容已编辑为使用Unicode字符映射。这是[0-9A-Za-z]的Unicode等价物+您需要为所需的字符添加正确的映射。