php5 ereg,ereg / eregi替代PHP 5.3
本问题已经有最佳答案,请猛点这里访问。
很抱歉提出一个问题,但是对于理解正则表达式代码毫无用处。
在我没有写的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相关推荐
- PHP的ereg()与eregi()的不同及相同点。对比
ereg() 字符串比对解析. 语法: int ereg(string pattern, string string, array [regs]); 返回值: 整数/数组 函数种类: 资料处理 内容说 ...
- (转)PHP的ereg()与eregi()的不同及相同点。对比
ereg() 字符串比对解析. 语法: int ereg(string pattern, string string, array [regs]); 返回值: 整数/数组 函数种类: 资料处理 内容说 ...
- mysql ereg_php中正则表达式匹配函数ereg是不是被弃用了?
DIEA 是的 call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array ...
- 四叶草云演-CTF03# ereg
网址:https://www.yunyansec.com/#/experiment/ctf/ 题目:ereg ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则, ...
- PHP5.3x被弃用的函数及代替方法
今天阳光明媚,万里无云,小记一下php5.3x被弃用的部分函数及代替方法 下面列举了部分被弃用的函数: call_user_method():(使用 call_user_func() 替代) call ...
- shopex.4.85支持php5.3
ShopEx 从PHP5.2到PHP5.3移植 移植中出现的问题: 1.短标签问题 shopex中的一些源文件中使用了短标签,<? ...?>.而在PHP5.3中短标签默认是关闭的.所以, ...
- 关于PHP5.3作废函数的处理方法
作废函数如下: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array ...
- php被替代,php 替代被弃用函数的
下面列举了部分被弃用的函数: call_user_method() (使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fu ...
- php被替代,被弃用的php函数以及用来替代的函数
下面列举了部分被弃用的函数: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fun ...
- 解析php.ini 中文版
php.ini对应的内容如下: ;;;;;;;;;;;; ;; 语法 ;; ;;;;;;;;;;;; ; 该文件的语法非常简单.空白字符和以分号开始的行被简单地忽略. ; 章节标题(例如: [ph ...
最新文章
- 每个程序员必看:如何在40岁后继续做软件开发?
- 使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
- 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。...
- C++关系运算符重载
- 深度学习(part1)--机器学习及深度学习基础
- sqlalchemy安装以及使用_防火阀的安装以及使用特点详细介绍
- 赞!史上最强音视频下载神器youtube-dl回归,GitHub75k星
- Airflow 中文文档:使用测试模式配置
- php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询
- 汉风西游辅助使用方法(此方法适用于红手指虚拟云手机和电脑雷电模拟器)
- 淮安颜老师计算机,颜老师_以老师为话题的作文750字_独木帆作文网
- 怎样访问服务器的文件,怎样访问服务器上的mht文件
- Biaofun分享给你什么是文案?
- 2017年第一次专题研讨会论坛成果:自行车和城市可持续发展国际案例
- 食油大学C++程序设计题解
- HASH 与 随机数
- ubuntu修改时区,tzselect报错: /usr/share/zoneinfo/iso3166.tab: No such file or directory
- 计算机类审稿快的中文期刊,审稿快的中文期刊_土木审稿快的期刊_最容易发表审稿快的学报...
- 我为什么要禁止回复,以及呵呵呵呵呵
- 糖儿飞教你学C++ Socket网络编程——5.套接字编程步骤与函数