diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index 18681ca186..4331828238 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -51,9 +51,10 @@ public class JDBCDefPane extends JPanel { public static final String DRIVER_TYPE = "driver_type"; public static final String USER_NAME = "user_name"; private static final String OTHER_DB = "Others"; - private static final Pattern ORACLE_URL = Pattern.compile("^jdbc:oracle:thin:@[/]*([0-9a-zA-Z_\\.]+)(:([0-9]+|port))?([:/](.*))?.*", Pattern.CASE_INSENSITIVE); - private static final Pattern GENERAL_URL = Pattern.compile("^jdbc:(mysql|sqlserver|db2|derby|postgresql|inceptor|inceptor2|hive2)://([0-9a-zA-Z_\\.]+)(:([0-9]+|port))?((/|;DatabaseName=)(.*))?.*", Pattern.CASE_INSENSITIVE); + private static final Pattern ORACLE_URL = Pattern.compile("^jdbc:oracle:thin:@[/]*([-0-9a-zA-Z_\\.]+)(:([0-9]+|port))?([:/](.*))?.*", Pattern.CASE_INSENSITIVE); + private static final Pattern GENERAL_URL = Pattern.compile("^jdbc:(mysql|sqlserver|db2|derby|postgresql|inceptor|inceptor2|hive2)://([-0-9a-zA-Z_\\.]+)(:([0-9]+|port))?((/|;DatabaseName=)(.*))?.*", Pattern.CASE_INSENSITIVE); private static final Pattern PORT = Pattern.compile("^0$|^[1-9][\\d]*[\\d]*$"); + private static final Pattern CHAR_NEED_ESCAPE = Pattern.compile("[?|$^*\\\\\\[\\](){}.+]"); // 编码转换. private String originalCharSet = null; private static Map jdbcMap = new HashMap(); @@ -389,6 +390,9 @@ public class JDBCDefPane extends JPanel { InputMethodListener portInputMethodListener = new InputMethodListener() { @Override public void inputMethodTextChanged(InputMethodEvent event) { + if (null == event.getText()) { + return; + } char ch = event.getText().current(); if (!(ch >= '0' && ch <= '9')) { event.consume(); @@ -484,13 +488,13 @@ public class JDBCDefPane extends JPanel { KeyListener portKeyListener = new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { - String port = portTextField.getText().trim(); + String port = portTextField.getText(); if (isPortValid(port)) { updateURL(); } else { - portTextField.setText(port.replaceAll(e.getKeyChar() + "", "")); + portTextField.setText(port.replaceAll(getCharNeedReplace(e.getKeyChar()) , "")); if (!isPortValid(portTextField.getText())) { - portTextField.setText(""); + portTextField.setText(StringUtils.EMPTY); updateURL(); } } @@ -501,6 +505,15 @@ public class JDBCDefPane extends JPanel { return PORT.matcher(port).find(); } + private String getCharNeedReplace(char c) { + String charNeedReplace = c + ""; + Matcher matcher = CHAR_NEED_ESCAPE.matcher(charNeedReplace); + if (matcher.find()) { + charNeedReplace = "\\" + charNeedReplace; + } + return charNeedReplace; + } + DocumentListener updateURLListener = new DocumentListener() { @Override