php - preg_match编译失败:字符类中的无效范围

标签 php regex validation laravel

这个问题已经有了答案:
preg_match(): Compilation failed: invalid range in character class at offset
4答
我使用laravel作为框架,并尝试使用自己的preg_match函数来验证表单。
以下是我的代码:

Validator::extend('alpha_num_spaces', function ($attribute, $value)
{
    return preg_match('/^([-a-z0-9_-\s])+$/i', $value);
});

现在,我已经在生产服务器上运行了这个程序,它运行得很好,但是,在我的本地计算机上,我收到:
preg_match(): Compilation failed: invalid range in character class at offset 13

我的猜测与php版本的不同有关?但我完全是基于猜测。或者也许regex实际上有问题?
提前谢谢。

最佳答案

您需要使用:

preg_match('/^([-a-z0-9_\s])+$/i', $value);


preg_match('/^([-\w\s])+$/i', $value);

在角色类的中间有一个未转义的连字符。
连字符必须位于字符类的第一个或最后一个位置,否则应进行转义。此外,你已经有一个连字符在第一位,所以不需要再有它。

关于php - preg_match编译失败:字符类中的无效范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426645/

相关文章:

php - 如何在 php 中获取特定国家/地区的正确日期时间

php - 使用 PHP 创建 mysql 的行的电子邮件内容

java - 使用具有不情愿、贪婪和占有量词的捕获组

c++ - C++ 中的 std::regex 表达式

javascript - javascript中的手机或电话号码验证

html - onmouseenter验证错误

java - 您提供的 AWS 访问 key ID 在我们的记录中不存在

regex - 使用 Regex 修改 CSV 中的特定列

validation - 向外部系统发送请求之前的其他验证逻辑

php - 在 css 中不正确显示具有 float 属性的 block