I have a validation like, String should contain at least one alphabet, or number. It may contain _ or - as optional character in between. The string should start and end with an alphabet or a number. I tried using many Regex, but I can't achieve this. Here is my RegEx code :
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;
}
}
And My Unit Test :
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"));
Last two assert getting failed. Please help me to solve this issue.
-and_?