正则表达式在 APEX 中不起作用,在 RegexPlanet 上起作用
Regex not working in APEX, working on RegexPlanet
我正在尝试为用户应输入 Oracle JDBC 瘦连接 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 与上面的正则表达式完全相同。其他验证工作正常。
A JDBC 瘦驱动程序连接字符串可以采用以下格式之一:
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 地址或名称。
如果您忽略 username/password,那么要匹配的正则表达式类似于:
^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
我正在尝试为用户应输入 Oracle JDBC 瘦连接 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 与上面的正则表达式完全相同。其他验证工作正常。
A JDBC 瘦驱动程序连接字符串可以采用以下格式之一:
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 地址或名称。
如果您忽略 username/password,那么要匹配的正则表达式类似于:
^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