У меня есть строка: Order_num = "0982asdlkj"
Как я могу разбить это на 2 переменные, с числовым элементом, а затем с другой переменной с элементом letter в php?
Элемент number может быть любой длиной от 1 до 4, а элемент letter заполняет остальную часть, чтобы сделать каждый order_num 10 символов в общем количестве.
Я нашел функцию php explode
… но не знаю, как это сделать в моем случае, потому что число чисел составляет от 1 до 4, а буквы являются случайными после этого, поэтому невозможно разбить на конкретную букву. Пожалуйста, помогите, насколько это возможно!
Вы можете использовать preg_split
с помощью lookahead и lookbehind :
print_r(preg_split('#(?<=\d)(?=[az])#i', "0982asdlkj"));
печать
Array ( [0] => 0982 [1] => asdlkj )
Это работает только в том случае, если буква содержит только буквы и цифры.
Обновить:
Просто уточнить, что здесь происходит:
Регулярные выражения смотрят на каждую позицию, и если перед этой позицией цифра ( (?<=\d)
) и буква после нее ( (?=[az])
), то она совпадает, и строка делится на эту позицию , Все это нечувствительно к регистру ( i
).
Используйте 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
Вы также можете сделать это, используя preg_split
, разделив ваш вход в точке, которая находится между цифрами и буквами:
list($num,$alpha) = preg_split('/(?<=\d)(?=[az]+)/i',$Order_num);
Видеть это
Для этого вы можете использовать регулярное выражение.
preg_match('/(\d{1,4})([az]+)/i', $str, $matches); array_shift($matches); list($num, $alpha) = $matches;
Проверь это
<?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