我无法创建一个mysql regexp,它会在IPv4的每个3个数字序列的开始时删除零。 问题是验证应该在数据库级别提供,我不知道如何制定正则表达式,它将用我的IPv4中的emtpy字符串替换所有0.,00。,。0,.00。
我希望我的正则表达式能够做到这样:
如果我有012.123.123.023进入数据库,则应保存为12.123.123.23
谢谢!
答案 0 :(得分:5)
通过利用MySQL函数INET_ATON()
and INET_NTOA()
,您可以可靠地将具有前导零的传入IPv4地址转换为不带前导零的相同字符串。将INET_ATON()
换成INET_NTOA()
,将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地址返回原始字符串或条带前导零:
mysql> SELECT INET_NTOA(INET_ATON('888.777.123.123'));
+-----------------------------------------+
| INET_NTOA(INET_ATON('888.007.123.123')) |
+-----------------------------------------+
| NULL |
+-----------------------------------------+