免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1701 | 回复: 9
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2007-05-18 10:39 |只看该作者
这个你需要问作者他是什么意图。


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

论坛徽章:
0
3 [报告]
发表于 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
4 [报告]
发表于 2007-05-18 11:01 |只看该作者
我已经给你列出了分析的123了哦。

论坛徽章:
0
5 [报告]
发表于 2007-05-18 11:03 |只看该作者
原帖由 HonestQiao 于 2007-5-18 11:01 发表
我已经给你列出了分析的123了哦。


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

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

论坛徽章:
0
6 [报告]
发表于 2007-05-18 12:01 |只看该作者
第一个是手误,. 在双引号内不需要逃逸 \\. 和 \. 一个样

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

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

论坛徽章:
0
7 [报告]
发表于 2007-05-18 12:19 |只看该作者
谢谢兄台

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
8 [报告]
发表于 2007-05-18 12:46 |只看该作者
原帖由 Namelessxp 于 2007-5-18 12:01 发表
第一个是手误,. 在双引号内不需要逃逸 \\. 和 \. 一个样

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


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

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

论坛徽章:
0
9 [报告]
发表于 2007-05-18 20:36 |只看该作者
楼上是对的,不过转义点号为什么要用两个反斜线呢

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

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

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
10 [报告]
发表于 2007-05-18 21:12 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP