【问题标题】:preg_match(): No ending delimiter '/'preg_match(): 没有结束分隔符'/'
【发布时间】:2016-12-07 17:01:34
【问题描述】:

我已经在 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);
?>

【问题讨论】:

  • 使用'ephone' =&gt; array('required', 'regex:/^[((\+)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$/'), 但我猜你想要^[+0][.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$,对吧?您想在开头匹配 0+,然后是可选的分隔符,其余部分。
  • 能否请您发布模式的要求?
  • 除了 Wiktor 的注释之外,还有一个问题:^[((\+)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$ 在最初的 "^" 锚之后紧跟一个无关的 "["。

标签: php regex laravel


【解决方案1】:

我认为您在这里缺少语法。您可以将以下模式用于正则表达式。

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

【讨论】:

  • 这个/^[((\+)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]+$/ 模式是错误的。
  • 感谢指正。我对常规 exp 做了一些改动。
  • 你偷了我的建议。 “试试这个”,“这应该有效”,并且没有解释为什么应该有效。这里没有“缺少”语法,只是不正确。
  • 这不是一个很好的措辞,就像你从文档中偷来的一样。 @WiktorStribiżew
  • 抱歉,我正在对我的帖子进行一些更改,实际上我只是想更正 laraval 的验证语法。
【解决方案2】:

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

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

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

使用

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2015-12-24
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多