preg_match():没有结束分隔符'/'

时间:2016-08-02 11:08:01

标签: php regex laravel

我已经在laravel中测试并实现了正则表达式,但它向我显示了错误。请看看这个

EmployerSignupRequest.php

'ephone'   => 'required|regex:/^[((\+)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$/',

我收到了这个错误。

preg_match():/var/www/html/jobma/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:1370

找不到结尾分隔符'/'

当我在php中运行时,这工作正常

<?php
    $subject = "+91-9041742722";
    $pattern = '/^[((\+)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$/';
    preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
    print_r($matches);
?>

2 个答案:

答案 0 :(得分:3)

我认为你在这里缺少语法。你可以使用下面的模式来表达你的正则表达式。

array('phone' => 'required', 'required|regex:/^\+?[^a-zA-Z]{5,}$/');

答案 1 :(得分:2)

首先,您需要使用数组,因为您的模式包含管道。见the docs

  

使用regex模式时,可能需要在数组中指定规则而不是使用管道分隔符,尤其是在正则表达式包含管道符时。

此外,您的模式以[((\+)|0)[.\- ]?可选字符类开头,该字符类与(+)|0匹配, [-或空格。我想您要匹配0+,可选地后跟分隔符,因此请将其替换为[0+][.\- ]

使用

'ephone' => ['required', 'regex:/^[0+][.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$/'],

如果+0是可选的,请在?之后添加[0+](这与0或文字{{1}匹配如果你之后添加+,这将是可选的,匹配模式的1或0次出现。)

您可以在the regex101.com online regex tester进一步测试正则表达式。