Mysql Regex从ipv4替换0

时间:2013-11-13 19:44:01

标签: mysql regex

我无法创建一个mysql regexp,它会在IPv4的每个3个数字序列的开始时删除零。 问题是验证应该在数据库级别提供,我不知道如何制定正则表达式,它将用我的IPv4中的emtpy字符串替换所有0.,00。,。0,.00。

我希望我的正则表达式能够做到这样:

如果我有012.123.123.023进入数据库,则应保存为12.123.123.23

谢谢!

1 个答案:

答案 0 :(得分:5)

通过利用MySQL函数INET_ATON() and INET_NTOA(),您可以可靠地将具有前导零的传入IPv4地址转换为不带前导零的相同字符串。将INET_ATON()换成INET_NTOA(),将IP地址首先转换为整数值,然后再转换为虚线四边形。

IP在各个地方带有前导零:

mysql> SELECT INET_NTOA(INET_ATON('001.110.011.111'));
+-----------------------------------------+
| INET_NTOA(INET_ATON('001.110.011.111')) |
+-----------------------------------------+
| 1.110.11.111                            |
+-----------------------------------------+

没有前导零进行比较:

mysql> SELECT INET_NTOA(INET_ATON('1.110.11.111'));
+--------------------------------------+
| INET_NTOA(INET_ATON('1.110.11.111')) |
+--------------------------------------+
| 1.110.11.111                         |
+--------------------------------------+

注意:如果输入的IP地址不是有效地址,则会返回NULL。它不会从错误的IP地址返回原始字符串或条带前导零:

带有前导零的IP地址错误:

mysql> SELECT INET_NTOA(INET_ATON('888.777.123.123'));
+-----------------------------------------+
| INET_NTOA(INET_ATON('888.007.123.123')) |
+-----------------------------------------+
| NULL                                    |
+-----------------------------------------+