2010-11-30 4 views
7

У меня есть строка, которая представляет собой комбинацию букв и цифр. Для моего приложения я должен разделить строку с буквами и цифрами: Ex: Если моя строка «12jan» я ВГ, чтобы получить «12», «джан» отдельно ..Как отделить буквы и цифры от строки в php

ответ

6
$string = "12312313sdfsdf24234"; 
preg_match_all('/([0-9]+|[a-zA-Z]+)/',$string,$matches); 
print_r($matches); 

это может работать много лучше

+0

givng из пут массива ( [0] => Массив ( ) [1] => Массив ( ) [2] => Массив ( ) ) – 2010-11-30 06:47:13

+0

правильно меняет мой ответ – Breezer 2010-11-30 06:56:55

5
preg_match_all('/^(\d+)(\w+)$/', $str, $matches); 

var_dump($matches); 

$day = $matches[1][0]; 
$month = $matches[2][0]; 

конечно, это работает только тогда, когда ваши строки в точности, как описано «abc123» (без пробелов, приложенных или предварённых).

Если вы хотите получить все числа и символы, вы можете сделать это с помощью одного регулярного выражения.

preg_match_all('/(\d)|(\w)/', $str, $matches); 

$numbers = implode($matches[1]); 
$letters = implode($matches[2]); 

var_dump($numbers, $letters); 

See it!

+0

Это предполагает, что строка не будет jan12 или fg1dg34sdf. – 2010-11-30 07:00:16

+0

Спасибо за округление моей репутации анонимного downvoter. :) – alex 2010-11-30 07:16:25

+0

My downvote был до того, как вы отредактировали свой ответ. Я отменил свой голос. :) – 2010-11-30 07:30:59

6
$numbers = preg_replace('/[^0-9]/', '', $str); 
$letters = preg_replace('/[^a-zA-Z]/', '', $str); 
0

Попробуйте:

$string="12jan"; 
$chars = ''; 
$nums = ''; 
for ($index=0;$index<strlen($string);$index++) { 
    if(isNumber($string[$index])) 
     $nums .= $string[$index]; 
    else  
     $chars .= $string[$index]; 
} 
echo "Chars: -$chars-<br>Nums: -$nums-"; 


function isNumber($c) { 
    return preg_match('/[0-9]/', $c); 
} 
11

Вы можете использовать preg_split разделить вашу строку в точке, которая предшествует цифре и следуют буквы, как:

$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str); 

Code in Action

<?php 
$str = '12jan'; 
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);                                                                
print_r($arr); 

Результат:

Array 
(
    [0] => 12 
    [1] => jan 
) 
0

Проработав больше с PHPExcel, такие операции являются общими. #Tapase ,. Вот preg_split, который вы хотите, чтобы вы хотели с пространством внутри строки.

<?php 
$str = "12 January"; 
$tempContents = preg_split("/[\s]+/", $str); 
foreach($tempContents as $temp){ 
echo '<br/>'.$temp; 
} 
?> 

Вы можете добавить запятую рядом с s для запятых. Надеюсь, это поможет кому-то. Антон К.

1

Это работает для меня, как на моем требовании, вы можете изменить в соответствии с Вашим

function stringSeperator($string,$type_return){ 

    $numbers =array(); 
    $alpha = array(); 
    $array = str_split($string); 
    for($x = 0; $x< count($array); $x++){ 
     if(is_numeric($array[$x])) 
      array_push($numbers,$array[$x]); 
     else 
      array_push($alpha,$array[$x]); 
    }// end for   

    $alpha = implode($alpha); 
    $numbers = implode($numbers); 

    if($type_return == 'number')  
    return $numbers; 
    elseif($type_return == 'alpha') 
    return $alpha; 

}// end function 
0
<?php 
$data = "#c1"; 
$fin = ltrim($data,'#c'); 
echo $fin; 
?> 
Смежные вопросы