PHP разбивает строку на целочисленный элемент и строку - PullRequest
22 голосов
/ 27 декабря 2010

У меня есть строка: Order_num = "0982asdlkj"

Как я могу разделить это на 2 переменные с элементом number и затем с другой переменной с элементом letter в php?

Числовой элемент может быть любой длины от 1 до 4, скажем, а буквенный элемент заполняет все остальное, чтобы длина каждого order_num составляла всего 10 символов.

Я нашел функцию php explode ... но неЯ знаю, как сделать это в моем случае, потому что число чисел находится в диапазоне от 1 до 4, а буквы случайны после этого, поэтому невозможно разделить на конкретную букву.Пожалуйста, помогите как можно более конкретно!

Ответы [ 5 ]

31 голосов
/ 27 декабря 2010

Вы можете использовать preg_split, используя lookahead и lookbehind :

print_r(preg_split('#(?<=\d)(?=[a-z])#i', "0982asdlkj"));

печать

Array
(
    [0] => 0982
    [1] => asdlkj
)

Это работает только в том случае, если буквенная часть действительно содержит только буквы и не содержит цифр.

Обновление:

Просто чтобы уточнить, что здесь происходит:

Регулярные выражения просматривают каждую позицию, и если цифра находится перед этой позицией ((?<=\d)) и буква после нее ((?=[a-z])), то она совпадает, и строка разбивается в этом позиция. Все это без учета регистра (i).

6 голосов
/ 27 декабря 2010

Используйте preg_match () с регулярным выражением (\d+)([a-zA-Z]+). Если вы хотите ограничить количество цифр до 1-4 и букв до 6-9, измените его на (\d+{1,4})([a-zA-Z]{6,9}).

preg_match("/(\\d+)([a-zA-Z]+)/", "0982asdlkj", $matches);
print("Integer component: " . $matches[1] . "\n");
print("Letter component: " . $matches[2] . "\n");

Выходы:

Integer component: 0982
Letter component: asdlkj

http://ideone.com/SKtKs

5 голосов
/ 27 декабря 2010

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

list($num,$alpha) = preg_split('/(?<=\d)(?=[a-z]+)/i',$Order_num);

Посмотреть

2 голосов
/ 27 декабря 2010

Для этого вы можете использовать регулярное выражение.

preg_match('/(\d{1,4})([a-z]+)/i', $str, $matches);
array_shift($matches);
list($num, $alpha) = $matches;
0 голосов
/ 27 декабря 2010

Проверьте это

<?php
$Order_num = "0982asdlkj";
$split=split("[0-9]",$Order_num);
$alpha=$split[(sizeof($split))-1];
$number=explode($alpha, $Order_num);
echo "Alpha -".$alpha."<br>";
echo "Number-".$number[0];
?>

с уважением

wazzy

...