только буквы, а не цифры .. - PullRequest
1 голос
/ 25 января 2012

Я пытаюсь написать функцию, которая будет обрезать все буквы от конца строки до первого числа, которое она нажимает.

По сути, у меня есть дочерние продукты, item101S, item101xxx и т. Д., И я хочу вывести только родительский продукт, item101.

Не уверен, стоит ли мне использовать регулярные выражения или! Is_numeric или что.

Любая помощь будет оценена!

Спасибо!

Ответы [ 6 ]

1 голос
/ 25 января 2012

Следующее удалит все буквы (az и AZ) с конца строки

$temp = 'item404Ssss';
echo preg_replace('/[a-zA-Z]+$/', '', $temp);

Вывод:

item404
1 голос
/ 25 января 2012
php > $s="item101xxx";
php > $pattern="/[^\d]*\d+/";
php > echo preg_match($pattern, $s, $m);
1
php > print_r($m);
Array
(
    [0] => item101
)
0 голосов
/ 25 января 2012

Эта функция удалит все, кроме цифр после последней цифры в строке.Если в строке нет цифр, она останется без изменений.

function strtrim( $str ) {
   return preg_replace('/(.+?\d)[^\d]*$/i', '$1', $str);
}

echo strtrim("item101S"); // item101
echo strtrim("paosdkpasd"); // paosdkpasd
echo strtrim("23121asd"); // 23121
echo strtrim("1321345+"); // 1321345

рабочий пример

0 голосов
/ 25 января 2012
function rtrim_letters( $input )
{
    $output = preg_replace('/[a-z]+$/i', '', $input );

    return $output;
}
0 голосов
/ 25 января 2012

Просто для демонстрации использования sscanf ()

$data = array('item101S', 'item101xxx');

foreach($data as $datum) {
    list($parent,$number,$child) = sscanf($datum,'%[A-Za-z]%d%s');
    $parent = $parent.$number;
    echo $parent,' -> ',$child,PHP_EOL;
}
0 голосов
/ 25 января 2012

Как это работает для вас?

$string = 'item101S';
$string = preg_replace('/(.+?)[a-z]+$/i','$1',$string);
...