首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >文本字段中的数字

文本字段中的数字
EN

Stack Overflow用户
提问于 2020-04-20 19:49:40
回答 2查看 28关注 0票数 1

我有这个文本作为产品名称(示例):"Lego creator 10270 Car V1 cool“我只需要提取10270。为此,我有以下php函数:

代码语言:javascript
运行
复制
function my_get_sku( $product_name = "" ) {
     $sku = 0;                       // if no SKU is found, return 0
     $sku_digits = 5;     // change this to the number of digits the SKUs have
     preg_match( '/ [\d]{' . $sku_digits . '} /', $product_name, $match );
     if ( $match ) {
         $sku = trim( $match[0] );
     }     
     return $sku;
}

但我发现,产品文本中的数字可以在4-10位之间。我需要提取数字并从numer的开头删除0,如果它在那里。谢谢你的帮忙

EN

回答 2

Stack Overflow用户

发布于 2020-04-20 19:58:26

这实际上很容易修复,使用正则表达式\d+来获取具有1个或多个数字的匹配:

代码语言:javascript
运行
复制
<?php

function my_get_sku($product_name) 
{
    if (empty($product_name))
        return 0;

    preg_match('/\d+/', $product_name, $match);
    if ($match !== false)
        return +$match[0]; // + will remove leading 0

    return 0;
}

echo my_get_sku('Lego creator 010270 Car V1 cool');

返回10270

票数 0
EN

Stack Overflow用户

发布于 2020-04-20 20:04:38

在原始代码中,它使用$sku_digits,这只是数字的数量(它在正则表达式中变成了{5} )。相反,您需要将其更改为{4,10},以指示所需的字符数。

它还检查第一个数字是否为0,如果第一个数字为0,则仅删除第一个数字。

我还将硬编码的空格更改为\b,这是一个单词边界,因此它将与紧随其后的,匹配(如示例中所示)

代码语言:javascript
运行
复制
function my_get_sku( $product_name = "" ) {
    $sku = 0;                       // if no SKU is found, return 0
    preg_match( '/\b[\d]{4,10}\b/', $product_name, $match );
    if ( $match ) {
        $sku = trim( $match[0] );
        if ( $sku[0] == '0' ){
            $sku = substr($sku, 1);
        }
    }
    return $sku;
}

echo my_get_sku("Lego 2 creator 0102704, Car V1 cool");

给出(它忽略前面的2,因为它是短的)

代码语言:javascript
运行
复制
102704
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61321787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档