我有这个文本作为产品名称(示例):"Lego creator 10270 Car V1 cool“我只需要提取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位之间。我需要提取数字并从numer的开头删除0,如果它在那里。谢谢你的帮忙
发布于 2020-04-20 19:58:26
这实际上很容易修复,使用正则表达式\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');
返回10270
发布于 2020-04-20 20:04:38
在原始代码中,它使用$sku_digits
,这只是数字的数量(它在正则表达式中变成了{5}
)。相反,您需要将其更改为{4,10}
,以指示所需的字符数。
它还检查第一个数字是否为0,如果第一个数字为0,则仅删除第一个数字。
我还将硬编码的空格更改为\b
,这是一个单词边界,因此它将与紧随其后的,
匹配(如示例中所示)
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,因为它是短的)
102704
https://stackoverflow.com/questions/61321787
复制相似问题