当我使用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;
}
});
答案 0 :(得分:0)
看起来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;