2012-01-25 3 views
1

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

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

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

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

Спасибо!

+0

Go с регулярным выражением. –

+0

Если вы пытаетесь показать нам, что у вас есть, и где вы застряли. –

+1

rtrim ($ product, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); поэтому я бы предположил, что регулярное выражение (или функция sscanf()) являются лучшими альтернативами –

ответ

1
php > $s="item101xxx"; 
php > $pattern="/[^\d]*\d+/"; 
php > echo preg_match($pattern, $s, $m); 
1 
php > print_r($m); 
Array 
(
    [0] => item101 
) 
+0

Упрощенный, так как это наиболее эффективное регулярное выражение. – Rohaq

+1

С этим 'item101xxx101xxx' станет' item101' вместо 'item101xxx101' (но с примерами, предоставленными OP, это работает) – 0b10011

+0

@bfrohs В соответствии с OQ' item101xxx101xxx 'является дочерним элементом' xxx101xxx' элемента ' item101' - так что это должно произойти –

1

follwing удалит все буквы (A-Z и A-Z) от конца строки

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

Выход есть:

item404 
0

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

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

Просто, чтобы продемонстрировать с помощью 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
function rtrim_letters($input) 
{ 
    $output = preg_replace('/[a-z]+$/i', '', $input); 

    return $output; 
} 
0

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

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 

working example

Смежные вопросы