Laravel 规则和正则表达式 (OR) 运算符的问题

     2023-02-24     216

关键词:

【中文标题】Laravel 规则和正则表达式 (OR) 运算符的问题【英文标题】:Issue with Laravel Rules & Regex (OR) operator 【发布时间】:2014-05-01 01:16:42 【问题描述】:

我的 Laravel 规则和正则表达式操作有一个小问题:

基本上,规则就是这样的数组:

'room'=>'required|alpha_num|min:2|max:10',

我遇到的问题是使用正则表达式和 | (或)运算符,例如:

'cid'=>'required|regex:/^((comp)|(soen)|(engr)|(elec))\d3$/i',

我收到一个服务器错误提示:

ErrorException

preg_match(): No ending delimiter '/' found

我猜preg_match 会停在/.../ 内的第一个|

有没有写上面的代码让它工作?

完整代码:

public static $rules = array(

'cid' => array('required', 'regex:/^((comp)|(soen)|(engr)|(elec))\d3$/i'),

'description'=>'required|regex:/^[A-Za-z \t]*$/i|min:3|unique:courses',

'credits'=>'required|regex:/^\d+(\.\d)?$/'

);

【问题讨论】:

Laravel pattern validation pipe character issue的可能重复 【参考方案1】:

我用这种风格救了我的命:-)

修改代码

    $validator = Validator::make(
    $request->all(),
        [
        'name' => 'required|string',
        'initial_credit' => 'required|integer|between:0,1000000|regex:/[1-9][0-9]*0000$/'
        ]
    ]);

    $validator = Validator::make(
    $request->all(),
        [
        'name' => 'required|string',
        'initial_credit' => [ // <=== Convert To Array
            'required',
            'integer',
            'between:0,1000000',
            'regex:/([1-9][0-9]*0000$)|([0])/' // <=== Use pipe | in regex
        ] // <=== End Array
    ]);

【讨论】:

【参考方案2】:

http://laravel.com/docs/validation#rule-regex

正则表达式:模式

验证中的字段必须与给定的正则表达式匹配。

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

澄清: 你会做这样的事情

$rules = array('test' => array('size:5', 'regex:foo'));

【讨论】:

我检查过了,但我不太确定这是什么意思,那么规则已经在一个数组中:public static $rules = array('name'=>'required|regex:/^(( Comp)|(Soen)|(Engr)|(Elec))/i', 'cid'=>'required|regex:/^((comp)|(soen)|(engr)|(elec))\d 3$/i', 'credits'=>'required|numeric' ); 编辑了我的答案以阐明如何使用数组。 在多个验证规则(包括正则表达式)中苦苦挣扎了大约一个小时,这救了我。【参考方案3】:

您应该使用array 而不是使用| 分隔规则:

'cid' => array('required', 'regex:/^((comp)|(soen)|(engr)|(elec))\d3$/i')

管道 (|) 叹息在您的正则表达式模式中可用,因此它与分隔符冲突。其他答案已经说明了。

【讨论】:

嗨,我尝试了上面的代码,但出现错误(主帖中的完整代码):BadMethodCallException 方法 [validateRequired|regex] 不存在。

cocos2d-x游戏《雷电大战》开源啦!要源码要资源快快来~~

写在前面的话:这是笔者开发的第二个小游戏《雷电大战》,之前就过这个游戏和《赵云要格斗》一样,最终将会开源。由于自己的一些个人原因。这个游戏还没有完成,但是许多网友都过来寻求代码或资源,本着开源的精神,... 查看详情

androidxml动画初步解析(activity界面之间跳转demo)

上一篇文章android简单地设置Activity界面的跳转动画讲了简单的activity界面之间的跳转,并且使用的是android内置的一些动画,此章就小提一下如何自己写一些动画来进行跳转。按例,还是上一下效果:(结尾附上源码)  &nb... 查看详情

javascript高级程序设计四

新的一天开始,让我们伴随者轻快的心情,开始今天的笔记1、操作符:  (1): *、/、-在ECMAScript中操作的时候,如果遇到有一个操作值不是数值型(Number),那么就会在后台调用number()方法,将其转化成Number   (2):+... 查看详情

alpha叠加

学习过程中的记录,供参考。foruok原创,转载请保留出处。欢迎关注微信订阅号“程序视界”。Alpha值的含义对于RGBA(或BGRA)数据,Alpha通道中存储的Alpha值,实际上应该是Opaque值,即不透明度。当Alpha值为255时,表示不透明;Al... 查看详情

使用strace工具跟踪系统调用和信号

 使用strace来执行程序,它会记录程序执行过程中调用,接收到的信号,通过查看记录结果,就可以知道程序打开哪些文件,进行哪些读写,映射哪些内存,向系统申请多少内存等信息 strace移植下载strace源码:strace-4.5.15.t... 查看详情

sarscape5.2哨兵1a数据的读取

SARscape5.2支持哨兵1A数据的读取,支持的数据类型有:SMSLC——条带模式的斜距单视复数产品IWSLC——干涉宽幅模式(TOPSMode)的斜距单视复数产品EWSLC——超宽幅模式(TOPSMode)的斜距单视复数产品SMGRD——... 查看详情

蓝桥杯历届试题错误票据(水)

 历届试题错误票据 时间限制:1.0s 内存限制:256.0MB      问题描写叙述某涉密单位下发了某种票据。并要在年终所有收回。每张票据有唯一的ID号。全年全部票据的ID号是连续的。但ID的開始数码... 查看详情

nsfilemanager的应用

单例,是在一个文件中只创建一次就能够全部一起共享,多创建的地址是相同的NSFileManager*manager=[NSFileManagerdefaultManager];是一个单例 NSFileManager*manager=[NSFileManagerdefaultManager];       //判断一个文件 查看详情

nodejs开发微信公众号微信网页授权

微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理、个人等信息的权限。对于开发了自己的网页app应用时,获取个人的信息非常重要。上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需要网... 查看详情

面向对象七大基本设计原则,今天我们就来谈谈

面向对象的七大基本原则:原则一单一职责原则单一职责原则(SRP:Singleresponsibilityprinciple)又称单一功能原则核心:解耦和增强内聚性(高内聚,低耦合)。原则二:里氏替换原则(LSP:Liskov Substitution Principle)核心:... 查看详情

一个js编写全选弹出对话框ajax-json的案例

  js功能有:全选、弹出对话框、使用json传输ajax数据;不想在写多余的文字了,直接上代码:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@taglibprefix=" 查看详情

iosbug日志-tableviewcell复用

试了三种方法列在下面新建cell文件包括.h.m.xib 然后在xib文件加上一个标签,目的是复用这个cell 一,在要调用的listcell中初始化一个类方法//+(ListCell*)cellwithTableView:(UITableView*)tablaeView;  //+(ListCell*)cellwithTableView:(UITabl... 查看详情

双向链表<一>

摘要:摘要:这里用的递归法,采用两种版本,一种是C语言,一种是C++;但是,用C语言没有“引用”,所以采用的是指向指针的指针;而C++具备“引用”,所以直接用&引用,简洁;先看C++的代码;BiTreeCreateBiTree(BiTr... 查看详情

js事件绑定和jq的事件绑定的几种方式

JS事件绑定的方式:1、内嵌法:<input type="button" onclick="test()" value="click me"/>  或者是多事件绑定:<input type="button" onclick="javascript:test();test1();" value 查看详情

基于html5的多张图片上传

图片上传之前也有写过demo,不过是单张上传的,最近有个业务需求是需要多张上传的,于是乎从新改写了一下HTML结构:<divclass="container"><label>请选择一个图像文件:</label><inputtype="file"id="file_input"multiple/></div&... 查看详情

html中让表单input等文本框为只读不可编辑的方法

 HTML中让表单input等文本框为只读不可编辑的方法 有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使inputtext的内容,中国两个字不可以修改 有时候,我们希望表单中的文本框是只读的,让... 查看详情

stackoverflow2016最新架构探秘

这篇文章主要揭秘StackOverflow截止到2016年的技术架构。  首先给出一个直观的数据,让大家有个初步的印象。   相比于2013年11月,StackOverflow在2016年02月统计数据有较大变化,下面给出2016年02月09号一天的数据,如下:HTTP... 查看详情

poj3041匈牙利算法模板题

一开始预习是百度的算法然后学习了一下然后找到了学长的ppt又学习了一下..发现..居然不一样...找了模板题试了试..百度的不好用反正就是wa了..果然还是应当跟着学长混..图两边的点分别是行数和列数每有一个点就让所处行列连... 查看详情