Php texfield中的数字

Php texfield中的数字,php,function,trim,data-extraction,Php,Function,Trim,Data Extraction,我将此文本作为产品名称(示例): “乐高创造者10270汽车V1酷” 我只需要提取10270。为此,我有以下php函数: 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 ha

我将此文本作为产品名称(示例): “乐高创造者10270汽车V1酷” 我只需要提取10270。为此,我有以下php函数:

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位之间。我需要提取数字并从数字的开头删除0(如果有)。
感谢您的帮助

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

<?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');

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

<?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');

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

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

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

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


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

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

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

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


如果其中一个答案有所帮助,请考虑将其标记为接受-如果其中一个答案有所帮助,请考虑将其标记为“接受”。
102704