免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1543 | 回复: 9

一个正则问题,没有看懂,作者的意图是什么呢? [复制链接]

论坛徽章:
0
发表于 2007-05-18 09:19 |显示全部楼层


  1. function check_email ($email){
  2.         if ($email!=""){             
  3.                 if (preg_match("/^.+@.+\\..+$/i",$email)){
  4.                         if (preg_match("/<|>|'|\"/i",$email)){
  5.                                 return 0;
  6.                         }else{
  7.                                 return 1;
  8.                         }
  9.                 } else {
  10.                         return 0;
  11.                 }
  12.         } else{
  13.                 return 0;
  14.         }
  15. }
复制代码


我想问一下,第三行中为什么会连续用两个 \\ 呢,如果要转义点号用一个\就行了啊



  1. function check_password ($password){
  2.         if ($password==""){
  3.                 return 0;
  4.         }else{
  5.                 if (preg_match("/[\'\"\\\]+/",$password) || strlen($password)<5){
  6.                         return 0;
  7.                 }else {
  8.                         return 1;
  9.                 }
  10.         }
  11. }

复制代码


第四行中若要匹配 \  用\\ 应该就可以了,为什么要用 \\\ 呢?

[ 本帖最后由 seasee 于 2007-5-18 10:28 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2007-05-18 10:39 |显示全部楼层
这个你需要问作者他是什么意图。


你如果想要自己分析的话,那么我提醒你:
1. 在PHP之中,""之中存在字符转义
2. 在preg之中,\也会存在字符转义
3. 两者会叠加转义,但是肯定是先1后2

论坛徽章:
0
发表于 2007-05-18 10:58 |显示全部楼层
原帖由 HonestQiao 于 2007-5-18 10:39 发表
这个你需要问作者他是什么意图。


你如果想要自己分析的话,那么我提醒你:
1. 在PHP之中,""之中存在字符转义
2. 在preg之中,\也会存在字符转义
3. 两者会叠加转义,但是肯定是先1后2



如果可以直接问作者,就不发上来了

特别关于叠加,如果你懂的话,帮我分析一下吧,我开不明白

拜托了,谢谢

[ 本帖最后由 seasee 于 2007-5-18 11:00 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2007-05-18 11:01 |显示全部楼层
我已经给你列出了分析的123了哦。

论坛徽章:
0
发表于 2007-05-18 11:03 |显示全部楼层
原帖由 HonestQiao 于 2007-5-18 11:01 发表
我已经给你列出了分析的123了哦。


我搜索了一下 正则 叠加  没有搜到什么内容

馒头有点硬,偶慢慢啃...

论坛徽章:
0
发表于 2007-05-18 12:01 |显示全部楼层
第一个是手误,. 在双引号内不需要逃逸 \\. 和 \. 一个样

"/[\'\"\\\]+/" 经过 ""后,preg收到的是 /['"\\]+/,收到后函数进行分析的时候,视为  ['"\]+ ,这个时候 \ 就代表 自身,不和其它字符组成逃逸等

三条\ ,前两条组成一次逃逸,后面那个 \ 和 ],不属于逃逸的组合,仍为 \] 和前次逃逸后的结果一起组成 \\],作为模式串 ['"\\]+ 表示包含 单引号 双引号 和 反斜杠 的一次或多次出现

论坛徽章:
0
发表于 2007-05-18 12:19 |显示全部楼层
谢谢兄台

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2007-05-18 12:46 |显示全部楼层
原帖由 Namelessxp 于 2007-5-18 12:01 发表
第一个是手误,. 在双引号内不需要逃逸 \\. 和 \. 一个样

"/[\'\"\\\]+/" 经过 ""后,preg收到的是 /['"\\]+/,收到后函数进行分析的时候,视为  ['"\]+ ,这个时候 \ 就代 ...


第一个并非手误,而是标准写法,如若有异议,请自行执行以下语句:

  1. var_export(preg_quote("."));
复制代码

论坛徽章:
0
发表于 2007-05-18 20:36 |显示全部楼层
楼上是对的,不过转义点号为什么要用两个反斜线呢

哦,这就是你说的叠加? 在双引号被\\. 已经转成了\.  ?

[ 本帖最后由 seasee 于 2007-5-18 20:38 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2007-05-18 21:12 |显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时9.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP