我需要验证给定的ip地址列表。 IP地址应在1.0.0.0到255.255.255.255
的范围内以下是我目前所做的事情:
WITH T(VAL) AS
( SELECT '123.1235.231.234.12' FROM dual
UNION ALL
SELECT '123123' FROM dual
UNION ALL
SELECT '011' FROM dual
UNION ALL
SELECT '011.' FROM dual
UNION ALL
SELECT '000.' FROM dual
UNION ALL
SELECT '123123' FROM dual
UNION ALL
SELECT '192.168.1.65' FROM dual
UNION ALL
SELECT '255.256.1.65' FROM dual
)
SELECT *
FROM t
WHERE REGEXP_LIKE(VAL,'^[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$')
AND REGEXP_SUBSTR(VAL, '[1-9]{1,3}',1,1) BETWEEN 1 AND 255
AND regexp_substr(val, '[0-9]{1,3}',1,2) BETWEEN 0 AND 255
AND REGEXP_SUBSTR(VAL, '[0-9]{1,3}',1,3) BETWEEN 0 AND 255
AND REGEXP_SUBSTR(VAL, '[0-9]{1,3}',1,4) BETWEEN 0 AND 255
它与我测试的数据一起工作正常。 如果我能用简单的正则表达式做同样的事情,请提供帮助。
提前致谢:)
答案 0 :(得分:2)
您的正则表达式中存在错误,例如,它与10.0.0.0
不匹配。
将其更改为:
'^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
以下测试将拒绝0.0.0.0