i am using php version 5.4.45 . i test this code in php version 7 and work true but not work in version 5.4.45
$string = '9301234567';
if( preg_match('/^\9\d{9}/', $string) )
{
$string = '0+1'.$string ;
return $string ;
}
in v7 return :
0+19301234567
but in v5.4.45 return (preg_match return false)
9301234567
how i can use preg_match('/^\9\d{9}/', $string)
in php v5.4.45 ?
Thanks
Your pattern is /^\9\d{9}/
. Note that there's a \9
in there. This is usually interpreted as a backreference (which is what's happening in your earlier version of PHP). I guess the interpreter is now smarter and realizes your subpattern \9
doesn't exist and so it understands it as a literal 9
instead.
I dug deeper into this change in behaviour and in PHP 5.5.10 they upgraded PCRE to version 8.34. Looking through the changelogs for PCRE, now, I discovered that version 8.34 of PCRE introduced the following change:
- Perl has changed its handling of \8 and \9. If there is no previously encountered capturing group of those numbers, they are treated as the literal characters 8 and 9 instead of a binary zero followed by the literals. PCRE now does the same.
Use this regex instead.
/^9\d{9}/
See code in use here
<?php
$string = '9301234567';
if( preg_match('/^9\d{9}/', $string) )
{
$string = '0+1'.$string ;
print $string ;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With