Oracle正则表达式的数字范围和长度

时间:2015-03-16 12:41:37

标签: sql regex validation oracle11g

我需要验证给定的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

它与我测试的数据一起工作正常。 如果我能用简单的正则表达式做同样的事情,请提供帮助。

提前致谢:)

1 个答案:

答案 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