Числа в тексфилде - PullRequest
       24

Числа в тексфилде

1 голос
/ 20 апреля 2020

там у меня есть этот текст в качестве названия продукта (пример): "Le go 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 цифр. Мне нужно извлечь число и удалить 0 из начала числа, если его там. Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Где в исходном коде он использовал $sku_digits, это просто количество цифр (оно было преобразовано в {5} в регулярном выражении). Вместо этого вам нужно изменить это значение на {4,10}, чтобы указать желаемое количество символов.

Он также проверяет первый ди git, если он равен 0, и удаляет только этот первый ди git если это 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
0 голосов
/ 20 апреля 2020

Это на самом деле очень легко исправить, используйте регулярное выражение \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

...