regular expression for multiple ip address
我有一个这样的PHP字符串。
1
| $str ="192.168.10.1;10.192.10.10;" //Contains repeated ip addresses |
我想使用preg_match函数的正则表达式来验证它,但是我无法为它创建正则表达式。我创造了以下:/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\;\z/。
但这只在第一个";"之前有效,而不是在之后。
提前谢谢
- 检查这个
- 好文章为什么regex不是解决此类问题的最佳解决方案:blogs.msdn.com/b/oldnewthing/archive/2006/05/22/603788.aspx
不是regex解决方案,但使用ip2long函数工作正常:
1 2 3 4 5 6 7 8 9 10
| <?php
$str ="192.168.10.1;10.192.10.10;256.10.10.10";
$ips = explode(";", $str);
foreach ($ips as $ip) {
if (strlen($ip) > 0 && ip2long($ip) === false) {
echo $ip." is not valid.";
}
} |
- 如果字符串是192.168.10.1;10.192.10.10;256.10.10.10;172.168.10.10;10.192.&zwnj;&8203;1.200;
- 你的链接发送到php.net的德语版本
- @AADI:它可以对任意长度的IP字符串进行验证。另外,最后一个字符串使脚本返回:256.10.10.10 is not valid.,在这里试试看。
- @西里尔语:改为英语
- @aadi如果您测试过我的示例,您已经看到它也适用于这个具体IP地址字符串。
- 非常感谢……
我建议用preg_match_all()代替preg_match()。preg_match_all()捕获主题字符串上的所有模式。
您还应该删除模式中的^,因为它只匹配主题字符串开头的模式。
我已经尝试过这个代码,并且工作得很好:
1 2 3 4 5 6 7 8
| <?php
$str ="192.168.10.1;10.192.10.10;";
$pattern ="/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\;/";
$match = array();
preg_match_all($pattern, $str, $match);
print_r($match);
?> |
输出:
1 2 3 4 5 6 7 8 9
| Array
(
[0] => Array
(
[0] => 192 .168 .10 .1 ;
[1] => 10 .192 .10 .10 ;
)
) |