Mysql Regex从ipv4替换0

use*_*649 1 regex mysql

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

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

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

谢谢 !

Mic*_*ski 5

通过利用MySQL函数INET_ATON(),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                            |
+-----------------------------------------+
Run Code Online (Sandbox Code Playgroud)

没有前导零进行比较:

mysql> SELECT INET_NTOA(INET_ATON('1.110.11.111'));
+--------------------------------------+
| INET_NTOA(INET_ATON('1.110.11.111')) |
+--------------------------------------+
| 1.110.11.111                         |
+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)

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

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

mysql> SELECT INET_NTOA(INET_ATON('888.777.123.123'));
+-----------------------------------------+
| INET_NTOA(INET_ATON('888.007.123.123')) |
+-----------------------------------------+
| NULL                                    |
+-----------------------------------------+
Run Code Online (Sandbox Code Playgroud)