gpt4 book ai didi

java - 使用正则表达式进行验证

转载 作者:行者123 更新时间:2023-12-01 08:00:08 24 4
gpt4 key购买 nike

我有一个验证,例如字符串应至少包含一个字母数字。它可能包含 _ 或 - 作为其间的可选字符。该字符串应以字母数字开头和结尾。我尝试使用许多正则表达式,但我无法实现这一点。这是我的正则表达式代码:

public static boolean isValidURL(String inputString) {
try {
boolean isValid = true;
Pattern letter = Pattern.compile("[a-zA-z0-9]");
String restPattern = "^[a-zA-Z0-9]+[a-zA-Z0-9_\\-\\s]?[a-zA-Z0-9]+$";
Matcher hasLetter = letter.matcher(inputString);
if (hasLetter.find()) {
if (inputString.matches(restPattern)) {
isValid = true;
} else {
isValid = false;
}
} else {
isValid = false;
}
return isValid;
} catch (Exception e) {
throw e;
}
}

和我的单元测试:

    assertEquals(true, Validator.isValidURL("res"));
assertEquals(true, Validator.isValidURL("res_rer"));
assertEquals(true, Validator.isValidURL("res-rer"));
assertEquals(true, Validator.isValidURL("res232A"));
assertEquals(true, Validator.isValidURL("232DFA"));
assertEquals(true, Validator.isValidURL("23_323"));
assertEquals(true, Validator.isValidURL("23"));
assertEquals(true, Validator.isValidURL("A2s"));
assertEquals(false, Validator.isValidURL("_"));
assertEquals(false, Validator.isValidURL("-"));
assertEquals(false, Validator.isValidURL("@"));
assertEquals(false, Validator.isValidURL("@GR$"));
assertEquals(false, Validator.isValidURL("_GR_"));
assertEquals(false, Validator.isValidURL("GR_"));
assertEquals(false, Validator.isValidURL("GR_"));
assertEquals(true, Validator.isValidURL("s"));
assertEquals(true, Validator.isValidURL("4"));

最后两个断言失败。请帮我解决这个问题。

最佳答案

下面的正则表达式允许一个或多个字母数字字符,并且还允许在字母数字字符之间使用 -_,但不允许在第一个或最后一个字符。

^[a-zA-Z0-9]+(?:[-_]+[a-zA-Z0-9]+)*$

DEMO

如果您不需要连续的 _-,请删除非捕获中存在的字符类后面的 +组。

^[a-zA-Z0-9]+(?:[-_][a-zA-Z0-9]+)*$

关于java - 使用正则表达式进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com