【问题标题】:Laravel regex validation for price OR emptyLaravel 正则表达式验证价格或空
【发布时间】:2018-12-11 00:46:50
【问题描述】:

我正在尝试为价格或为空的正则表达式。 我有实际有效的价格部分(荷兰语使用逗号而不是点)

/^\d+(,\d{1,2})?$/

上面的正则表达式在值 21,99 上验证 ok

现在我尝试添加空白部分,以便该字段可以......只是空的^$

/(^$|^\d+(,\d{1,2})?$)/

但是,当我更改正则表达式时,Laravel 开始抱怨: “方法 [validate^\d+(,\d{1,2})?$)/] 不存在。”

工作正常:

$rules = [
    'price' => 'regex:/^\d+(,\d{1,2})?$/'
];

Laravel 说不...:

$rules = [
    'price' => 'regex:/(^$|^\d+(,\d{1,2})?$)/'
];

Kenken9990 答案 - Laravel 不再中断,但空值仍然是错误的:

$rules = [
    'price' => 'regex:/^(\d+(,\d{1,2})?)?$/'
];

【问题讨论】:

  • 你能添加一个有效和无效的模式,正则表达式需要验证。
  • 在 php 中你能使用像 lambda 函数这样的正则表达式吗?我不认为你可以。
  • @emsimpson92 我不是程序员,不是 Lambda?
  • 抱歉,我的意思是匿名函数。 => 正是 C​​# 语法。看起来它在 PHP 中有a different meaning。你的问题是=>
  • @emsimpson92 在 PHP 中,您可以创建一个这样的数组。示例 1 有效,示例 2 失败。这只是我认为的正则表达式,或者 Laravel ......哦,现在我知道你对 Lamba 的意思了,将值传递给函数或其他东西?

标签: php regex laravel


【解决方案1】:

这是作品吗?

$rules = [
    'price' => 'nullable|regex:/^(\d+(,\d{1,2})?)?$/'
];

【讨论】:

  • 你是我的英雄,我 54ck 正则表达式
  • 真是太糟糕了,它不会再坏了,但它仍然说空值是不行的,但它应该
  • @poashoas 添加'nullable'
  • 提交一个空的输入会变成null,意思是设置为nullable,空的部分不需要正则表达式
  • @WiktorStribiżew 这应该是一个答案,而不仅仅是评论
【解决方案2】:

| 也是多个验证规则的分隔符。

例如以下是有效的:

 $rules = [ "price" => "nullable|numeric|between:0,99" ];

要使用正则表达式,您需要切换到使用数组:

$rules = [
    'price' => [ 'regex:/(^$|^\d+(,\d{1,2})?$)/' ]
];

documentation中也指出了这一点:

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

顺便说一句,原来的规则也可以做你想做的,也可以写成:

$rules [
     'price' => [ 'nullable', 'numeric', 'between:0,99' ]
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多