本问题已经有最佳答案,请猛点这里访问。

很抱歉提出一个问题,但是对于理解正则表达式代码毫无用处。

在我没有写的php模块中,以下函数

function isURL($url = NULL) {

if($url==NULL) return false;

$protocol = '(http://|https://)';

$allowed = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';

$regex ="^". $protocol . // must include the protocol

'(' . $allowed . '{1,63}\.)+'. // 1 or several sub domains with a max of 63 chars

'[a-z]' . '{2,6}'; // followed by a TLD

if(eregi($regex, $url)==true) return true;

else return false;

}

有什么好心的人可以给我替换代码吗,用什么来替换eregi

更换它的目的是什么?

自PHP 5.3起,@ William,ereg,eregi,split等功能已被弃用(不仅弃用,而且已完全删除)。 。

完全更换? stackoverflow.com/questions/9954064/ereg-eregi-replacement/

@William,但是该解决方案过于局限在这种情况下……如果他要将某些代码移植到PHP 5.3,则需要更通用的解决方案。

@Tomas,很公平。

很好的问题-在升级到PHP 5.3(不推荐使用ereg和eregi函数)时,这是必需的。取代

eregi('pattern', $string, $matches)

采用

preg_match('/pattern/i', $string, $matches)

(第一个参数中的尾随i表示忽略大小写,并且与eregi中的i相对应-在替换ereg调用的情况下只是跳过)。

但是请注意新旧模式之间的差异!该页面列出了主要的区别,但是对于更复杂的正则表达式,您必须更详细地了解POSIX regex(由旧的ereg / eregi / split函数等支持)和PCRE之间的区别。

但是在您的示例中,可以安全地将eregi调用替换为:

if (preg_match("%{$regex}%i", $url))

return true;

(请注意:%是定界符;通常使用斜杠/。您必须确保定界符不在正则表达式中或对其进行转义。在您的示例中,斜杠是$ regex的一部分,因此更多方便使用不同的字符作为分隔符。)

非常感谢Tomas,您是明星。

抱歉,托马斯您的解决方案给出了一个错误preg_match()[function.preg-match]:未知修饰符h是由}之后的i引起的

@科林,好吧,我明白了!这是因为在$ regex中也使用了定界符| ...因此我们必须使用$ regex中不存在的其他定界符,例如%(希望我没有再次忽略某些东西:-)。更新了我的答案。

非常感谢,这似乎已经解决了问题。最后一个问题。当匹配字母字符时,eregi忽略大小写区别。我现在拥有的代码仍然可以执行此操作,还是需要在$ allowed中添加更多内容?

@Colin,否,ignorecase选项是在preg_match的pattern参数末尾看到的尾部" i"。此新代码应与旧代码完全等效。

再一次感谢你。我非常感谢您提供的帮助和您的解释。

@Colin,不客气。

该文档说(带有i(PCRE_CASELESS)修饰符是什么意思?

缓和PHP 5.3,直到您替换所有不赞成使用的功能

if(!function_exists('ereg'))            { function ereg($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/', $subject, $matches); } }

if(!function_exists('eregi'))           { function eregi($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/i', $subject, $matches); } }

if(!function_exists('ereg_replace'))    { function ereg_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/', $replacement, $string); } }

if(!function_exists('eregi_replace'))   { function eregi_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/i', $replacement, $string); } }

if(!function_exists('split'))           { function split($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/', $subject, $limit); } }

if(!function_exists('spliti'))          { function spliti($pattern, $subject, $limit = -1) { return preg_split('/'.$pattern.'/i', $subject, $limit); } }

有趣的是,在我的特定版本的PHP 5.3下,初始化构造&$matches = []似乎失败了。

您是否想要完全替代preg_match和eregi?

if(!filter_var($URI, FILTER_VALIDATE_URL))

{

return false;

} else {

return true;

}

或电子邮件:

if(!filter_var($EMAIL, FILTER_VALIDATE_EMAIL))

{

return false;

} else {

return true;

}

eregi在PHP中已贬值,您必须使用preg_match

function isValidURL($url)

{

return preg_match('%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i', $url);

}

if(isValidURL("http://google.com"))

{

echo"Good URL" ;

}

else

{

echo"Bad Url" ;

}

有关更多信息,请参见http://php.net/manual/en/function.preg-match.php

谢谢

:)

您的替换正则表达式不适用相同的规则

嘿,选民..你介意给出我为什么被拒绝的理由吗???

@meouw ...规则是验证有效的电子邮件地址...我遗漏了什么吗

问题是要用等价的东西替换ereg正则表达式-您的不等价-您的具有可选协议部分,例如,原始协议需要专门的协议

@meouw有人只是提供了一个非正则表达式示例,但没有被否决...我所提供的只是URL验证的替代品..我认为您应该已经离开Colin来决定其是否与他有关或现在有关。.我不代码有误...可能不是100%,但这并不意味着我应该被否决

谢谢你的支持.....

谢谢,我非常感谢您的答复。我的主机刚刚升级到PHP / 5.3.10,因此需要替换。在Baba提供的解决方案中,我唯一看不到的是原始功能检查1个或多个最多63个字符的子域的功能。

@科林...看到...很高兴我们在哪里可以提供帮助....

php5 ereg,ereg / eregi替代PHP 5.3相关推荐

  1. PHP的ereg()与eregi()的不同及相同点。对比

    ereg() 字符串比对解析. 语法: int ereg(string pattern, string string, array [regs]); 返回值: 整数/数组 函数种类: 资料处理 内容说 ...

  2. (转)PHP的ereg()与eregi()的不同及相同点。对比

    ereg() 字符串比对解析. 语法: int ereg(string pattern, string string, array [regs]); 返回值: 整数/数组 函数种类: 资料处理 内容说 ...

  3. mysql ereg_php中正则表达式匹配函数ereg是不是被弃用了?

    DIEA 是的 call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array ...

  4. 四叶草云演-CTF03# ereg

    网址:https://www.yunyansec.com/#/experiment/ctf/ 题目:ereg ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则, ...

  5. PHP5.3x被弃用的函数及代替方法

    今天阳光明媚,万里无云,小记一下php5.3x被弃用的部分函数及代替方法 下面列举了部分被弃用的函数: call_user_method():(使用 call_user_func() 替代) call ...

  6. shopex.4.85支持php5.3

    ShopEx 从PHP5.2到PHP5.3移植 移植中出现的问题: 1.短标签问题 shopex中的一些源文件中使用了短标签,<? ...?>.而在PHP5.3中短标签默认是关闭的.所以, ...

  7. 关于PHP5.3作废函数的处理方法

    作废函数如下: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array ...

  8. php被替代,php 替代被弃用函数的

    下面列举了部分被弃用的函数: call_user_method() (使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fu ...

  9. php被替代,被弃用的php函数以及用来替代的函数

    下面列举了部分被弃用的函数: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fun ...

  10. 解析php.ini 中文版

    php.ini对应的内容如下: ;;;;;;;;;;;; ;;  语法  ;; ;;;;;;;;;;;; ; 该文件的语法非常简单.空白字符和以分号开始的行被简单地忽略. ; 章节标题(例如: [ph ...

最新文章

  1. 每个程序员必看:如何在40岁后继续做软件开发?
  2. 使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
  3. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。...
  4. C++关系运算符重载
  5. 深度学习(part1)--机器学习及深度学习基础
  6. sqlalchemy安装以及使用_防火阀的安装以及使用特点详细介绍
  7. 赞!史上最强音视频下载神器youtube-dl回归,GitHub75k星
  8. Airflow 中文文档:使用测试模式配置
  9. php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询
  10. 汉风西游辅助使用方法(此方法适用于红手指虚拟云手机和电脑雷电模拟器)
  11. 淮安颜老师计算机,颜老师_以老师为话题的作文750字_独木帆作文网
  12. 怎样访问服务器的文件,怎样访问服务器上的mht文件
  13. Biaofun分享给你什么是文案?
  14. 2017年第一次专题研讨会论坛成果:自行车和城市可持续发展国际案例
  15. 食油大学C++程序设计题解
  16. HASH 与 随机数
  17. ubuntu修改时区,tzselect报错: /usr/share/zoneinfo/iso3166.tab: No such file or directory
  18. 计算机类审稿快的中文期刊,审稿快的中文期刊_土木审稿快的期刊_最容易发表审稿快的学报...
  19. 我为什么要禁止回复,以及呵呵呵呵呵
  20. 糖儿飞教你学C++ Socket网络编程——5.套接字编程步骤与函数

热门文章

  1. 优化python中os模块遍历文件夹时的排序问题
  2. c语言抖动算法,游戏中抖动(振动)算法的实现
  3. 注册坚果云无法连接服务器,坚果云无法连接服务器怎么办?
  4. ps快速抠图 PS抠白底图
  5. 学生学籍管理系统(c语言)
  6. 2018.09.02【BZOJ2227】【ZJOI2011】看电影 (高精度)(组合数)
  7. 关键字查询输入%问题
  8. 信息系统项目管理师考试核心考点汇总
  9. 【测试】各类视频(MP4、FLV、MKV、3GP)测试地址摘录,目前链接亲测有效!
  10. 【转载】社会网络中心性度量