Search code examples
phpregexvalidationpreg-matchrepeat

Validate string to be 10-digits long with first 5 as the same digit and the second 5 as the same digit


I'm trying to port this Java to PHP:

String _value = '1111122222';
if (_value.matches("(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}")) {
    // check for number with the same first 5 and last 5 digits 
    return true;
}

As the comment suggests, I want to test for a string like '1111122222' or '5555566666'

How can I do this in PHP?


Solution

  • You can use preg_match to do so:

    preg_match('/^(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}$/', $_value)
    

    This returns the number of matches (i.e. either 0 or 1) or false if there was an error. Since the String’s matches method returns only true if the whole string matches the given pattern but preg_match doesn’t (a substring suffices), you need to set markers for the start and the end of the string with ^ and $.

    You can also use this shorter regular expression:

    ^(?:(\d)\1{4}){2}$
    

    And if the second sequence of numbers needs to be different from the former, use this:

    ^(\d)\1{4}(?!\1)(\d)\2{4}$