PHP 正则表达式中的“字符类中的范围不按顺序排列”


"range out of order in character class" in PHP regex?

我试图让这项工作工作一段时间,但徒劳无功。我想创建一个 php 正则表达式来检查字符串是否至少有一个数字和 ( _-+=*&) 中的至少一个符号

这是我的正则表达式

 $result = preg_match('/^(?=.*'d)(?=.*[_-+=*&]).{3,}$/',$pass);

我收到以下错误 警告:preg_match() [function.preg-match]:编译失败:myfile 中偏移量为 17 处字符类的范围不按顺序排列.php在第 8 行

有什么帮助吗?

-需要转义,或放在[...]列表的开头/结尾:

$result = preg_match('/^(?=.*'d)(?=.*[-_+=*&]).{3,}$/',$pass);

如果不这样做,-将被解释为范围运算符,如果x > y [x-y],则会收到该错误。

当我收到此警告时,我在模式的末尾使用了/u。试试吧。这意味着不贪婪的模式

$pattern = "^([ `anything` ])$/u";