正则表达式单元测试通过,但实际上尝试使用它时似乎无法正常工作

     2023-02-22     144

关键词:

【中文标题】正则表达式单元测试通过,但实际上尝试使用它时似乎无法正常工作【英文标题】:Regex unit test passes but doesn't appear to work properly actually trying to use it 【发布时间】:2016-09-14 23:51:15 【问题描述】:

This is a link to the String in a linter.

这就是表达式本身:

(?i)\b((?:https?:\/\/|www\d0,3[.]|[a-z0-9.\-]+[.][a-z]2,4\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\];:'\".,<>?«»“”‘’]))

我正在尝试使用此表达式验证几乎任何 Web url。

我们可以在这里看到它按预期通过了单元测试:

然而正如我所说,当我尝试运行我的代码时,它似乎忽略了验证......让我摸不着头脑。

这些是代码的相关部分:

//kindly taken from here: http://***.com/a/34589895/2226328
function checkPageSpeed($url)    
    if (function_exists('file_get_contents'))     
        $result = @file_get_contents($url);
       

    if ($result == '')     
        $ch = curl_init();    
        $timeout = 60;    
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER,1);//get the header
        curl_setopt($ch, CURLOPT_NOBODY,1);//and *only* get the header    
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//get the response as a string from curl_exec(), rather than echoing it
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);  
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT,1);//don't use a cached version of the url    

        $result = curl_exec($ch);    
        curl_close($ch);    
         
    return $result;    
  

function pingGoogle($url)

    echo "<h1>".$url."</h1>";

    if(strtolower(substr($url, 0, 4)) !== "http") 
        echo "adding http:// to $url <br/>";
        $url = "http://".$url;
        echo "URL is now $url <br/>";
     

    //original idea from https://gist.github.com/dperini/729294
    $re = "/(?i)\\b((?:https?:\\/\\/|www\\d0,3[.]|[a-z0-9.\\-]+[.][a-z]2,4\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\];:'\\\".,<>?«»“”‘’]))/"; 

    $test = preg_match($re, $url);  
    var_export($test);

    if( $test === 1)  
        echo "$url passes pattern Test...let's check if it's actually valid ..."; 

        pingGoogle("hjm.google.cm/");
        pingGoogle("gamefaqs.com");
    
    else 
     
        echo  "URL formatted proper but isn't an active URL! <br/>"; 
    

【问题讨论】:

可能是您拥有的 === 而不是 == 吗?请看这里***.com/questions/1117967/what-does-mean。尝试将其更改为 == 看看会发生什么。 @Remuze 仍然有相同的结果......我也从 sublimetext 中得到了有趣的格式问题......但如果它实际上只是程序或问题的话:puu.sh/oWlBI/fcef09bfc4.png 我可能在这里遗漏了一些东西,但为什么屏幕截图中有单反斜杠,而 PHP 代码中有双反斜杠? `\` 不会转义反斜杠吗? 不太确定,他们不在这里了,我可能在正则表达式 linter 中弄乱了它,然后再将其粘贴回我的代码中 您可能想要更新您的代码以反映这一点:) 【参考方案1】:

天哪,这是一个正则表达式半......

考虑使用parse_url 让PHP 为您进行处理。由于您只对域名感兴趣,请尝试:

$host = parse_url($url, PHP_URL_HOST);
if( $host === null) 
    echo "Failed to parse, no host found";

else 
    // do something with supposed host here

【讨论】:

meh...我想我已经决定使用这个@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@ 来工作...我真的不需要按照你的建议去做,因为我在解析后运行该测试以查看是否一个 url 看起来像一个 url,如果它无法连接,它就会失败......顺便说一下......这是一个正则表达式,然后是一些:gist.githubusercontent.com/dperini/729294/raw/… @Frankenmint 我看到你的“正则表达式,然后是一些”并提高你the regex in RFC822【参考方案2】:

您是否考虑过简单地使用 PHP 的内置验证过滤器 FILTER_VALIDATE_URLfilter_var() 来实现此目的?在简化代码和性能方面,它可能比推出自己的基于正则表达式的解决方案要好。

http://php.net/manual/en/function.filter-var.php

http://php.net/manual/en/filter.filters.validate.php

【讨论】:

事件点击单元测试VUE

...尝试使用普通按钮标签,但结果相同。我是测试新手,这实际上是我的第一次运行,所以欢迎提示和指点。这是我正在测试的组件:<template><di 查看详情

尝试在java中使用正则表达式时堆栈溢出

】尝试在java中使用正则表达式时堆栈溢出【英文标题】:Stackoverflowwhentryingtouseregexinjava【发布时间】:2019-01-1320:35:44【问题描述】:我已经阅读了一些关于如何优化正则表达式的文章,但没有一个答案(较少的组,使用X,Y而不... 查看详情

Flutter:单元测试一个 Cubit 问题

】Flutter:单元测试一个Cubit问题【英文标题】:Flutter:UnitTestingaCubitissues【发布时间】:2021-10-1012:20:59【问题描述】:我一直在尝试为我的cubit设置单元测试,但bloc测试似乎有问题。只是尝试检查值的初始状态在常规测试中工作... 查看详情

如何在 shell 脚本中使用正则表达式?

】如何在shell脚本中使用正则表达式?【英文标题】:HowdoIusearegexinashellscript?【发布时间】:2016-06-2510:50:33【问题描述】:我正在尝试将字符串与shell脚本中的正则表达式匹配。此字符串是脚本的参数($1),它是日期(MM/DD/YYYY)我正... 查看详情

(php) 正则表达式删除注释但忽略字符串中的出现

】(php)正则表达式删除注释但忽略字符串中的出现【英文标题】:(php)regextoremovecommentsbutignoreoccuranceswithinstrings【发布时间】:2011-01-2908:56:15【问题描述】:我正在写一个评论剥离器,并试图在这里满足所有需求。我有下面的代码... 查看详情

使用正则表达式通过 PHP 缩小 JS

】使用正则表达式通过PHP缩小JS【英文标题】:MinifyJSviaPHPusingregex【发布时间】:2018-12-0220:51:15【问题描述】:有人会告诉我关于JS缩小的问题吗?我尝试创建它,但没有成功。我们将通过示例向您展示:https://code.jquery.com/jquery-3... 查看详情

单元测试数据库

】单元测试数据库【英文标题】:Unit-TestingDatabases【发布时间】:2008-08-2201:35:33【问题描述】:去年夏天,我正在开发一个基本的ASP.NET/SQLServerCRUD应用程序,单元测试是其中一项要求。当我尝试对数据库进行测试时遇到了一些麻... 查看详情

如何用上个月的值替换“无”单元格

】如何用上个月的值替换“无”单元格【英文标题】:howtoreplace"Nothing"cellbylastmonthvalue【发布时间】:2014-03-3108:54:48【问题描述】:我正在使用s-s-rS通过Matrix开发报告。我每个月对产品销售数量求和,但如果某个月的销售... 查看详情

Laravel - 输入未通过单元测试

】Laravel-输入未通过单元测试【英文标题】:Laravel-inputnotpassingoverthroughunittest【发布时间】:2014-03-0208:11:43【问题描述】:我在运行单元测试时收到以下错误。似乎它不喜欢将Input::get传递给构造函数,但是在浏览器中运行脚本时... 查看详情

单元测试定位服务

】单元测试定位服务【英文标题】:UnitTestingLocationService【发布时间】:2011-08-2215:01:38【问题描述】:我正在尝试对位置跟踪服务进行单元测试。我正在尝试使用locationManager.addTestProvider和setTestProviderLocation方法来实现这一点。但... 查看详情

使用 C# 的正则表达式匹配(简单??)正则表达式

】使用C#的正则表达式匹配(简单??)正则表达式【英文标题】:Matchingan(easy??)regularexpressionusingC#\'sregex【发布时间】:2010-09-1612:08:46【问题描述】:好的,抱歉,这似乎是一个愚蠢的问题,但我无法弄清楚:我正在尝试解析... 查看详情

验收测试与单元测试示例

】验收测试与单元测试示例【英文标题】:AcceptanceTestsvsUnitTestExamples【发布时间】:2011-07-1319:16:30【问题描述】:好的,所以我一直在尝试查看有关测试的信息,不同的测试库等等。在我看来,人们总是将这些测试的区别明确定... 查看详情

正则表达式信用卡号码测试

】正则表达式信用卡号码测试【英文标题】:Regexcreditcardnumbertests【发布时间】:2012-03-0802:36:48【问题描述】:我正在测试一个应用程序,其中Regex模式匹配信用卡,然后应该突出显示这些数字。我正在使用站点http://regexpal.com/为... 查看详情

正则表达式概述

正则表达式概述什么是正则表达式**正则表达式(RegularExpression)**是用于匹配字符串中字符串组合的模式。在JavaScript中,正则表达式也是对象通常用来检索,替换哪些某个模式(规则)的文本,例如验证表单:用户名表单只输入英文字... 查看详情

使用 Sinon 进行单元测试:如何在回调中测试变量?

】使用Sinon进行单元测试:如何在回调中测试变量?【英文标题】:UnitTestingw/Sinon:HowdoItestavariableinsideofaCallback?【发布时间】:2019-05-0510:16:17【问题描述】:我正在与Sinon进行单元测试,以至少尝试让某些东西通过,但我不走运。... 查看详情

如何允许 scss 开玩笑地对 typescript nextjs 进行单元测试?

...和identity-obj-proxy,但它们都不起作用。我想知道我的正则表达式是否有问题。错误位于importutilityStylesf 查看详情

Java 正则表达式是不是支持排序序列?

】Java正则表达式是不是支持排序序列?【英文标题】:DoJavaregularexpressionssupportcollatingsequences?Java正则表达式是否支持排序序列?【发布时间】:2019-03-1600:57:54【问题描述】:我正在尝试针对测试字符串chchch使用正则表达式([[.ch.]... 查看详情

使用正则表达式删除 JavaScript

】使用正则表达式删除JavaScript【英文标题】:RemoveJavaScriptwithRegex【发布时间】:2011-12-2321:23:51【问题描述】:我无法使用C#从HTML页面中删除所有javascript。我有三个正则表达式删除了很多但也错过了很多。使用MSHTMLDOM解析器解析... 查看详情