Regular expression for range of IP addresses?

Good day, please tell me, the challenge is to determine the following ranges: - –

He wrote a regular expression:
$named range1 = "77.88.0.[0-1][0-9]";
$range2 = "77.88.2[2-3].[0-2][0-9][0-9]";

But for example this code writes that is not found:
if (preg_match("",$named range1)) {
 echo "Entry found.";
} else {
 echo "Entry not found.";


Tell me what I'm doing wrong?
Properly written regular expression? ( if not, how correctly to those ranges to write regular expressions ) ?
March 19th 20 at 09:29
3 answers
March 19th 20 at 09:31
To check such things with regexps - is fundamentally wrong. IP address is just a 32-bit integer. Every operating system and almost every language has functions for working with IP addresses and ranges. PHP is no exception:

$firstIpAsString = '';
$lastIpAsString = '';
$ipAsString = '';

$firstIp = ip2long($firstIpAsString);
$lastIp = ip2long($lastIpAsString);
$ip = ip2long($ipAsString);

 'first' => $firstIp,
 'last' => $lastIp,
 'ip' => $ip,
 'in range?' => $firstIp <= $ip && $ip <= $lastIp,
], false);
March 19th 20 at 09:33
$named range1 = "77\.88\.0\.[0-1]?\d";
In General, the range and range bring the ip to an integer and check whether it borders.
March 19th 20 at 09:35
As you wrote, to define the range of IP addresses, converting them to integers. But if the regexps, in your case, you can:
$named range1 = "77\.88\.0\.([0-9]$|[1][0-8]$)";
$range2 = "77\.88\.(22/23)\.[0-9]+$";
or in one line:
$range = '(77\.88\.0\.([0-9]$|[1][0-8]$)|77\.88\.(22/23)\.[0-9]+$)';

Find more questions by tags Regular expressionsPHP