我正在尝试为用户输入Oracle JDBC Thin连接URL的字段创建验证,例如:
jdbc:oracle:thin:@//192.168.2.1:1521/XE
jdbc:oracle:thin:192.168.2.1:1521:X01A
jdbc:oracle:thin:@//192.168.2.1:1521/COM.EXAMPLE
我尝试使用RegexPlanet对正则表达式进行测试,并说它正在运行(我正在使用的正则表达式):
^jdbc:oracle:thin:[@//]*[.\w]+:\d+[:]*[/]*[a-zA-Z0-9.]*$
但是,当我尝试使用此正则表达式验证表单时,它会显示错误消息,即使我使用与上述相同的URL也是如此。其他验证工作正常。
答案 0 :(得分:1)
JDBC Thin Driver Connection字符串可以采用以下格式之一:
jdbc:oracle:thin:@[HOST][:PORT]:SID
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
jdbc:oracle:thin:[USER/PASSWORD]@[HOST][:PORT]:SID
jdbc:oracle:thin:[USER/PASSWORD]@//[HOST][:PORT]/SERVICE
HOST
可以是IP地址或名称。
如果忽略用户名/密码,那么匹配的正则表达式就像:
^jdbc:oracle:thin:@(//)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\w+):\d+[:/][a-zA-Z0-9.]+$
(虽然它并不完美 - 但是匹配这个的完美正则表达式会很大)
<强>查询强>:
WITH connections ( conn ) AS (
SELECT 'jdbc:oracle:thin:@//192.168.2.1:1521/XE' FROM DUAL UNION ALL
SELECT 'jdbc:oracle:thin:@192.168.2.1:1521:X01A' FROM DUAL UNION ALL
SELECT 'jdbc:oracle:thin:@//192.168.2.1:1521/COM.EXAMPLE' FROM DUAL
)
SELECT *
FROM connections
WHERE REGEXP_LIKE( conn, '^jdbc:oracle:thin:@(//)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\w+):\d+[:/][a-zA-Z0-9.]+$' );
<强>结果:
CONN
------------------------------------------------
jdbc:oracle:thin:@//192.168.2.1:1521/XE
jdbc:oracle:thin:@192.168.2.1:1521:X01A
jdbc:oracle:thin:@//192.168.2.1:1521/COM.EXAMPLE