【问题标题】:java 6 vs. java 7 string.matches with regexjava 6 与 java 7 string.matches 与正则表达式
【发布时间】:2013-03-21 06:38:39
【问题描述】:

我在使用 string.matches(regex) 时遇到了 url 验证器的问题。以下在 Java 6 中工作,但在 Java 7 中不工作。

regex = "^http[s]?://(([^/:\\.[:space:]]+(\\.[^/:\\.[:space:]]+)*)|([0-9](\\.[0-9]{3})))(:[0-9]+)?((/[^?#[:space:]]+)(\\?[^#[:space:]]+)?(\\#.+)?)?$"

此代码在客户端使用 GWT/GXT 在发送到服务器端之前验证用户输入。

至少可以说令人费解。

这是方法:

public boolean validateURL(String url) {
    return ((url != null) && url.matches(VALID_URL_REGEX));
}   

其中 VALID_URL_REGEX 等于上面的正则表达式

下面是调用 validateURL 方法的代码:

    this.serverUrlTextField.addValidator(new AbstractValidator<String>() {
        @Override
        public List<EditorError> validate(Editor<String> field, String value) {
            String url = serverUrlTextField.getText();
            if (!Util.validateURL(url)) {
                okButton.setEnabled(false);
                return createError(new DefaultEditorError(field, INVALID_URL, value));
            }
            okButton.setEnabled(true);
            return null;
        }
    });

【问题讨论】:

  • 您能否提供一个输入示例供我们检查?
  • 抱歉,忘了补充一点,Java 7 中的所有内容都作为错误返回。
  • @TungPham 您能否发布一个适用于 Java 6 并导致 Java 7 错误(输入、方法调用等)的示例代码,以便我们重现它?
  • URL 文本字段的自动验证设置为 true。 yahoo.com 失败
  • @TungPham 在你展示你正在运行的代码之前,很难得到答案......

标签: javascript regex url gxt


【解决方案1】:

看起来 GXT 有一个特殊的类com.google.gwt.regexp.shared.RegExp,它与 JavaScript 更兼容。我还修改了正则表达式,使其适用于 JavaScript。

String p = "^(http[s]?://)?(([^/:\\.\\s]+(\.[^/:\\.\\s]+)*)|([0-9](\\.[0-9]{3})))(:[0-9]+)?((/[^?#\\s]+)(\\?[^#\\s]+)?(\\#.+)?)?$";
RegExp r = RegExp.compile(p, "i");
String url = serverUrlTextField.getText();
if (!r.test(url)) {
    okButton.setEnabled(false);
    return createError(new DefaultEditorError(field, INVALID_URL, value));
}
okButton.setEnabled(true);
return null;

【讨论】:

  • 我试过了,但 GXT 不支持 java.net.URI。代码被编译,GXT java 代码被编译为 javascripts 以在网络浏览器中使用。
  • @tphamcc - 好的,只是确保。如果您使用的是 GXT,那么您应该使用 com.google.gwt.regexp.shared.RegExp
猜你喜欢
  • 2011-06-13
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多