Search code examples
phpregexsplittext-parsingalphanumeric

Split alphanumeric string between leading digits and trailing letters


I have a string like:

$Order_num = "0982asdlkj";

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

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.


Solution

  • 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).