Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP split string into integer element and string

Tags:

I have a string say: Order_num = "0982asdlkj"

How can I split that into the 2 variables, with the number element and then another variable with the letter element in php?

The number element can be any length from 1 to 4 say and the letter element fills the rest to make every order_num 10 characters long in total.

I have found the php explode function...but don't know how to make it in my case because the number of numbers is between 1 and 4 and the letters are random after that, so no way to split at a particular letter. Please help as specifically as possible!

like image 488
David19801 Avatar asked Dec 27 '10 10:12

David19801


2 Answers

You can use preg_split using lookahead and lookbehind:

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

prints

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

This only works if the letter part really only contains letters and no digits.

Update:

Just to clarify what is going on here:

The regular expressions looks at every position and if a digit is before that position ((?<=\d)) and a letter after it ((?=[a-z])), then it matches and the string gets split at this position. The whole thing is case-insensitive (i).

like image 186
Felix Kling Avatar answered Sep 27 '22 17:09

Felix Kling


Use preg_match() with a regular expression of (\d+)([a-zA-Z]+). If you want to limit the number of digits to 1-4 and letters to 6-9, change it to (\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"); 

Outputs:

Integer component: 0982 Letter component: asdlkj 

http://ideone.com/SKtKs

like image 28
moinudin Avatar answered Sep 27 '22 16:09

moinudin