我正在编写一个PHP文件,该文件获取网页内容,过滤全角数字,并将其转换为半角数字.目前,我的程序返回页面上的所有全角字符,而不仅仅是数字.

<?php
$fullwidthPattern = '/([0-9])/';

$handle = curl_init();
 
$url = (URL removed for privacy reasons);

function getFullWidth(string $input) {
    global $fullwidthPattern;
    return preg_match($fullwidthPattern, $input);
}

curl_setopt($handle, CURLOPT_URL, $url);

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
 
$output = curl_exec($handle);
 
curl_close($handle);

function jp_str_split($str) {
    $pattern = '/(?<!^)(?!$)/u';
    return preg_split($pattern,$str);
}

$jpContents = jp_str_split($output);

$numbers = array_filter($jpContents, 'getFullWidth');

foreach($numbers as $x) {
    echo $x;
}

我的正则表达式当前是‘/([0-9])/’,但我也try 了‘/[0-9]/’和‘/[0123456789]/’.

推荐答案

拆分应使用

function jp_str_split($str) {
    preg_match_all('/\X/u', $str, $matches);
    return $matches[0]; 
}

\X struct 匹配任何Unicode字素in full,(?<!^)(?!$)正则表达式匹配字符串内的any个位置,即使在字节之间也是如此,而不考虑u标志的存在(它影响您使用的字符,而不是匹配字符串内的位置).

此外,由于您要处理Unicode数字,因此还必须在第二个正则表达式中传递u标志:

$fullwidthPattern = '/([0-9])/u';

Php相关问答推荐

Laravel:启动下载并同时在Blade 中显示Flash消息

为什么注册SIGHUP的处理程序函数会阻止在PHP CLI中等待输入时点击X关闭Xterm窗口?""

Woocommerce自定义变体html表仅显示带值的列

以编程方式更改新订单、已取消订单和失败订单的邮箱WooCommerce通知

WooCommerce HPOS管理订单列表中带有订单元数据的定制列

WooCommerce常规价格增加额外的附加平价

Symfony 6.2 IsGraned具有多个角色

将WooCommerce WC_Order对象与wp_Schedule_Event一起使用

PHP SimpleXML:按属性值访问 node

Laravel路由到控制器传输变量解决方案需要

在具有Angular 的 Laravel 应用程序中,不显示图像

使用 PHP,我可以将 foreach 语句放入瞬态中吗?

多个产品类别 Select 自定义 WooCommerce 插件设置页面

当我激活插件时出现错误注意:未定义的偏移量:1

为什么foreach循环会输出每个结果?

Woocommerce API 的 PHP Curl 附加参数

php-http/discovery 插件 1.15.1 是否仍在使用自己的模块 destruct Contao 4.13 中的composer 安装?

如何从 PHP 中的字符串位置排除图像扩展名

使用 PHP ImageMagick 库将 pdf 文件的前 n 页转换为单个 png 图像文件

如何在php中获取大于50的年龄