1

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

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

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

谢谢 !

4

1 回答 1

6

通过利用 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                            |
+-----------------------------------------+

并且没有前导零进行比较:

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

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

带前导零的错误 IP 地址:

mysql> SELECT INET_NTOA(INET_ATON('888.777.123.123'));
+-----------------------------------------+
| INET_NTOA(INET_ATON('888.007.123.123')) |
+-----------------------------------------+
| NULL                                    |
+-----------------------------------------+
于 2013-11-13T20:02:23.190 回答