使用正则表达式过滤并返回匹配的数字

2024-03-07

在这里,我尝试使用正则表达式从文本中过滤特定的电话号码。电话名称可能有这样的漏洞。

4023one345233应被视为40231345233然后应该过滤。

这段代码运行良好,没有漏洞:

code1:

$arrwords = array(0=>'zero',1=>'one',2=>'two',3=>'three',4=>'four',5=>'five',6=>'six',7=>'seven',8=>'eight',9=>'nine');
preg_match_all('/[A-za-z]+/', $text, $matches);
$arr=$matches[0];
foreach($arr as $v)
{
    $v = strtolower($v);
    if(in_array($v,$arrwords))
    {
        $text= str_replace($v,array_search($v,$arrwords),$text);
    }
}
foreach ($words as $word){

    $pattern = '/^(?=.{8,14})b$\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$^|^2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-49]|8[01349])|21[0-7]|31[0-8]|[459]1\d|61[0-46-9]))\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\d)|3(?:0\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|2[02-5789]|[37]\d|4[02-69]|5[0-8]|[69][0-79]|8[0-5789])|5(?:0[1235-9]|2[024-9]|3[0145689]|4[02-9]|5[03-9]|6\d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\d|9[2-57]))\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\d)|276\d|6(?:26[06-9]|686))|6(?:06(?:4\d|7[4-79])|295[567]|35[34]\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\d{3}|176888[234678]\d{2}|16977[23]\d{3}|7(?:[1-4]\d\d|5(?:0[0-8]|[13-9]\d|2[0-35-9])|624|7(?:0[1-9]|[1-7]\d|8[02-9]|9[0-689])|8(?:[014-9]\d|[23][0-8])|9(?:[04-9]\d|1[02-9]|2[0-35-9]|3[0-689]))\d{6}|76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}|80(?:0\d{6,7}|8\d{7})|500\d{6}|(?:87[123]|9(?:[01]\d|8[0-3]))\d{7}|8(?:4[2-5]|70)\d{7}|70\d{8}|56\d{8}|(?:3[0347]|55)\d{8}|8(?:001111|45464\d)$|(?:\((\+?\d+)?\)|(\+\d{0,3}))? ?\d{2,3}([-\.]?\d{2,3} ?){3,4}/';
    preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE );            
    $this->pushToResultSet($matches);
}

从 SO 帮助中,我可以找到这段代码,该代码利用上述漏洞过滤数字。

http://ideone.com/8UW22U - 测试链接 http://ideone.com/8UW22U

code2:

$arrwords = array_flip(array(0=>'zero',1=>'one',2=>'two',3=>'three',4=>'four',5=>'five',6=>'six',7=>'seven',8=>'eight',9=>'nine'));

$s = "my long STRING with some Numbers 402three1345233 4023one345233";

$sanitised = array();    
foreach (explode(" ", $s) as $word) {
    $num = strtr(strtolower($word), $arrwords);
    $sanitised[] = is_numeric($num) ? str_repeat("*", strlen($word)) : $word;        
}

echo implode(" ", $sanitised);

但就像在我的第一个代码中一样,我只想在找到数字然后返回后匹配模式matched pattern

这里我尝试将代码2移植到代码1中。

foreach (explode(" ", $s) as $word) {
    $num = strtr(strtolower($word), $arrwords);
    if(is_numeric($num)){ 
         $pattern = 'regex_above';
        preg_match_all($pattern, <$text?????>, $matches, PREG_OFFSET_CAPTURE );            
        $this->pushToResultSet($matches);

    }
}

有人可以帮助纠正这个问题吗?

Note:请注意,原始号码和匹配图案的长度应该相同。 方法4023three345233应匹配为**************** not ***********


如果我正确理解你的问题,你想用星号替换一串数字(可能包含书面数字)。星号的数量必须等于字符串中的字符数。

在下面的代码中,正则表达式匹配包含 3 到 7 个数字的字符串。

$s = "123 onetwothree 1two3 one dog";
$new_words = array();
$numbers = array();
$pattern = "#(\d|zero|one|two|three|four|five|six|seven|eight|nine){3,7}#i";
foreach(explode(" ", $s) as $word) {
    if(preg_match($pattern, $word, $matches)) {
        $new_words[] = str_repeat("*", strlen($word));
        $numbers[] = $matches[0];
    } else {
        $new_words[] = $word;
    }
}

$new_s = implode(" ", $new_words);
print $new_s . "\n";
print implode(" ", $numbers) . "\n";

这使:

*** *********** ***** one dog
123 onetwothree 1two3

代码中的正则表达式非常长,将“zero|one|...”添加到正则表达式对您来说可能不可行。另一种解决方案可能是:

  • 获取字符串中每个单词的字符数:$word_lengths
  • 将书面数字替换为其数值。例如‘一’变成‘1’
  • 与您的长正则表达式匹配
  • 如果匹配,则根据$word_lengths创建一串星号
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式过滤并返回匹配的数字 的相关文章

  • 根据产品类别自定义购物车总计和结帐总计文本

    我想根据产品类别 或其他一些逻辑 自定义购物车和结帐订单汇总表中的文本 例如 对于 总计 文本 参见图片 如果购物车包含名为 杂货 的类别中的产品 那么我希望订单摘要中的文本显示为 总计估计 文本 参见图片以下 如果购物车不包含任何杂货 那
  • 如何对“2-1”这样的字符串进行数学计算以产生“1”?

    我只是想知道 PHP 是否有一个函数可以接受像这样的字符串2 1并产生它的算术结果 或者我必须手动执行此操作explode 获取算术运算符左侧和右侧的值 我知道这个问题很老了 但我昨晚在寻找不太相关的东西时遇到了它 而且这里的每个答案都很糟
  • 从字符串中删除重音符号

    最近我在 StringUtils 库中发现了非常有用的方法 即 StringUtils stripAccents String s 我发现它对于删除任何特殊字符并将其转换为某些 ASCII 等效字符 确实很有帮助 例如 c 等 现在我正在为
  • 如何在 WordPress 中添加 PHP 页面链接到我的页脚

    我创建了一个自定义 PHP 页面名称 privacy policy 名称为privacy php 我如何链接页脚中的页面 以便当有人点击隐私链接时页面打开 我已在此页面中调用页眉和页脚 这个怎么做 谢谢 In the wp content
  • 如何使用 Libsodium-PHP 加密/解密 AES

    我需要用 PHP 加密 解密数据 我对此完全陌生 但是我读到 Libsodium PHP 是 AES 加密的最佳工具 就像我研究过的其他 PHP 加密库一样 Libsoduim PHP 似乎几乎没有提供如何使用该库的文档 我能够找到 任何有
  • 如何在我的网站上获取用户的国旗

    我想在我的网站上显示用户 访问者的国旗 我使用不同的技术 如 php jsp 和简单的 html 所以我想要一个代码 通过放置在我的网站上 访问者可以看到它 并且它应该在所有平台上运行 简而言之 我想要国家检测 API 如果有人能帮助我 我
  • 如何从正则表达式中获取所有匹配项?

    我想获得所有出现的情况 0 9A Z 以供稍后处理 我有 if cat file 0 9A Z then echo BASH REMATCH fi 这给了我第一个匹配项 但是我如何处理文件中的所有匹配项 谢谢 如果您只想获取正则表达式的匹配
  • 将 WordPress 的登录/注册页面重定向到自定义登录/注册页面

    我有一个网站 有一个用户系统 我想将 WordPress 的用户系统集成到该网站的用户系统中 但我仍然想使用该网站的注册 登录页面 我不希望任何人能够使用 Wordpress 的登录或注册表单登录或注册 相反 当他们尝试访问 Wordpre
  • PHP 编译器 openssl 错误

    在提问之前 我必须说我已经tried堆栈和其他地方的每个类似问题都失败了 我无法使用composer因为这个错误 requires ext openssl gt the requested PHP extension openssl is
  • 循环遍历数据数组并打印“递增”字母

    我需要循环遍历数据数组并为每个数组值打印一个 递增 字母 我知道我可以这样做 array array 11 33 44 98 1 3 2 9 66 21 45 array to loop through letters array a b
  • PHP 数字:小数点仅在需要时可见

    我想知道是否存在一些函数可以自动按十进制格式化数字 所以如果我有 所以我的答案是 如果我的数据库中有 DECIMAL 数据格式 仅当它
  • 我需要编写什么代码才能使用 HTTPS?

    在标准的 小册子 站点中 我有一个子系统 其中私人数据在一系列页面中来回传递 该网站已完成 现在可以在没有 HTTPS 的情况下运行 有人可以向我指出在网站的安全部分实施 HTTPS 所需执行的步骤列表吗 作为程序员 您唯一需要做的就是检查
  • 在php中用逗号替换空格和换行符

    我搜索过但找不到任何有帮助的东西 所以 我有一堆数据 我基本上只需要在它们之间添加逗号 这些数据都来自记录 所以它的形式如下 13 566 888 958 898 我需要像这样输出 13 566 888 958 898 如果我可以将任意 2
  • 在 VS Code 中调试 PHPUnit 测试?

    我最近配置了 VS code 以使用 xdebug 调试 PHP 它与我的应用程序代码一起可靠地工作 但是当我使用 PHPunit 运行单元测试时 我的断点被忽略 我的服务器在一个流浪盒子内运行 My php ini文件包含以下行 xdeb
  • 来自发布数据的 CodeIgniter 未通过

    我试图在 CodeIgniter 中上传文件 但是当我添加 enctype multipart form data 时 不会有任何发布数据通过 甚至其他领域也根本没有 但是 当我不添加它时 我可以获得其他帖子数据 但当然没有文件上传 这里出
  • 使用正则表达式处理大字符串的灾难性回溯问题

    我试图捕获两个字符串之间的所有内容 问题是我想要捕获的这个字符串可以长达 3000 行数字和逗号 因此 当发生这种情况时 我会遇到灾难性回溯错误 这是我正在使用的正则表达式以及下面的示例数据 NEM12 s S lt CSVInterval
  • 使用 Facebook API 在朋友的墙上发布帖子

    我希望我的 Facebook 应用程序能够获取使用该应用程序的用户的 ID 并在他们的一位朋友的墙上找到该 ID 发布的帖子 我更喜欢使用个人 ID 的示例 而不是迭代所有朋友 我认为两个用户很可能都必须向应用程序提供权限才能执行此操作 这
  • 获取本周星期一和星期五的日期 (PHP)

    如何获取本周周一和周五的日期 我有以下代码 但如果当天是星期日或星期六 则会失败 current day date N days to friday 5 current day days from monday current day 1
  • MongoDb Spring 在嵌套对象中查找

    我正在使用 Spring Data Mongodb 和这样的文档 id ObjectId 565c5ed433a140520cdedd7f attributes 565c5ed433a140520cdedd73 333563851 list
  • 无法使用 javascript 建立与安全 Websocket 服务器的连接

    我的开发环境是这样的 操作系统 微软Windows 10 PHP 框架 Laravel 8 0 PHP 版本 7 4 Websocket 服务器 cboden ratchet 0 4 3 WAMP 服务器 3 2 0 Apache 2 4

随机推荐

  • Windows 服务中 RuntimeHelpers.PrepareMethod 的缺点[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在调查服务器 具有多个服务 启动后不久发生的延迟问题 我添加了一个简单的方法来加载引用的 DLL 并执行RuntimeHelpers Pre
  • 如何通过SW在AMP页面中包含自定义JS?

    我们已经浏览了所有可能的 AMP 博客 但找不到任何在 AMP 中包含自定义 JS 的方法 这个博客 https www ampproject org docs guides pwa amp amp as pwa extend your a
  • 类似 Chrome 的菜单显示

    我正在尝试查找一些有关如何创建看起来像 Android chrome 菜单顶部的菜单的信息 我尝试过为 Android 4 0 实现图标 但没有成功 尝试过谷歌搜索 但我发现的唯一答案是当 API gt 11 时无法实现图标 那么 Chro
  • JavaScript 中相当于 PHP 中的 var_dump 或 print_r 的是什么? [复制]

    这个问题在这里已经有答案了 我想查看 JavaScript 中对象的结构 用于调试 PHP中有类似var dump的东西吗 大多数现代浏览器的开发工具中都有一个控制台 对于此类调试很有用 console log myvar 然后 您将在控制
  • Python BaseHTTPServer.HTTPServer - 启动和停止事件的回调

    参考 http docs python org 2 library basehttpserver html http docs python org 2 library basehttpserver html 我有以下使用的代码片段Pyth
  • JPA GenerationType.AUTO 不考虑具有自动增量的列

    我有一个表 其中有一个简单的 int id 列 在 SQL Server 中具有身份自动增量 实体的 Id 注释为 Id and GeneratedValue Id GeneratedValue strategy GenerationTyp
  • 如何在 django 中安全地存储第三方服务的密码?

    我正在 Django 上运行 Web 服务 用户注册到我的系统并向我提供第三方网络服务的登录详细信息 用户名和密码 我的目的是以最好 最安全的方式存储这些详细信息 不幸的是 我的服务需要这些数据来用于查询第 3 方服务的某些离线脚本 因此我
  • event.stopPropagation() 不起作用 - 捕获仍然传递函数

    首先 我是一个菜鸟 抱歉 如果这个问题足够基本 其次 我尝试搜索 正如我所看到的 我按照其他帖子中的说明应用了解决方案 话虽这么说 我有三组 DIV 每组由 2 个 Div 组成 一个在另一个里面 在 OUTER div 上有一个函数 表示
  • 如何确定是否为 TFS 构建定义执行了 MSBUILD 参数

    我正在使用 Team Foundation Service 2012 带有内部托管的构建控制器 以便我可以将应用程序部署到我们的 Web 服务器 我设置了构建定义 并使用我的调试配置 并提供了以下 MSBUILD 参数 p DeployOn
  • 使用 jQuery 显示/隐藏表格列

    我有一个有五列的表格 column1 column2 column3 column4 column5 当选中第一个复选框时 我有一些复选框 每个复选框对应一列 然后我需要显示第一列 如果未选中我需要隐藏第一列 像那样 我需要对所有列进行操作
  • 我可以将 git 上的分叉项目更新为原始/主副本吗?

    几周前 我在 GitHub 上分叉了一个公共项目 今天 我想尝试一些东西 但我想确保我使用的副本是最新的 我可以先更新我的前叉吗 如果在我开始更改后对叉子进行更改 会发生什么情况 我可以再次更新我的分叉 同时将我的更改保留在那里 即合并 如
  • 如何让 grunt 服务任务与 watch 一起工作?

    我最近安装并启动并运行了它 但我似乎无法让它与我的手表任务同时运行 在我的 grunt 文件中 如果在监视之前注册服务任务 服务器会旋转 但监视任务不会 反之亦然 这是服务包 我正在使用并附加了 Grunt 文件 https www npm
  • 如何在 Dart / Flutter 中使用另一个文件的功能?

    我有一个 Flutter 应用程序 正在使用 flutter web view 包 我在几个不同的文件上使用它 并且希望创建自己的文件 并在我的应用程序中的任何位置简单地引用 launchwebview 函数 因为需要几行代码才能使其工作
  • 负载下 .Net Core 容器的 SQL Server DbCommand 超时

    我正在 Open Shift Enterprise V3 上运行一个指向 SQL Server 数据库的 Net Core 容器 我有一个 Net Core REST API 带有 put 方法 可以在数据库中添加或更新记录 我添加 更新的
  • MATLAB - 从分类器生成混淆矩阵

    我有一些测试数据和标签 testZ 0 25 0 29 0 62 0 27 0 82 1 18 0 93 0 54 0 78 0 31 1 11 1 08 1 02 testY 1 1 1 1 1 2 2 2 2 2 2 2 2 然后我对它
  • 删除 pyspark 中所有列名称中的空格

    我是 pySpark 的新手 我收到了一个大约有 1000 列的 csv 文件 我正在使用数据块 大多数这些列之间都有空格 例如 总收入 总年龄 等 我需要更新所有带有下划线 空格的列名称 我已经尝试过这个 foreach DataColu
  • 根据另一个数据帧替换数据帧中的值

    我有以下两个数据框 gt df1 lt data frame A c 0 0 0 B c 0 201 0 C c 0 467 0 A B C 1 0 0 1 2 0 201 467 3 0 0 0 gt df2 lt data frame
  • 如何在R中设置plotly图表具有透明背景?

    到目前为止 这是我所拥有的 f1 lt list family Arial sans serif size 25 color white f2 lt list family Old Standard TT serif size 14 col
  • Mysql:检查范围时间冲突[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有下表 其中存储了教师的课堂例程
  • 使用正则表达式过滤并返回匹配的数字

    在这里 我尝试使用正则表达式从文本中过滤特定的电话号码 电话名称可能有这样的漏洞 4023one345233应被视为40231345233然后应该过滤 这段代码运行良好 没有漏洞 code1 arrwords array 0 gt zero