I have a regex that makes sure the username has only characters from a-z or A-Z or 0-9 and is between 3-15 characters.
What I'd like a separate regex for each:
1) Check if its between 3-15 characters (any symbol any alphabet; only thing that matters is no.of characters)
2) Must contain characters from a-z or A-Z or 0-9 or . _ (dot and underscore) (no space/whitespace)
3) Characters from a-z or A-Z (can contain spaces/whitespace)
This works fine:
private static final String PASSWORD_PATTERN = "^[a-zA-Z0-9_-]{3,15}$";
etlogin_username.addValidator(new RegexpValidator("Regex wrong", USERNAME_PATTERN));
The following returns false:
1) USERNAME_PATTERN1 returns false for "dummyu!:)"
2) REALNAME_PATTERN returns false for "Davic Schummer"
private static final String USERNAME_PATTERN1 = "^\\w{3,15}$";
private static final String USERNAME_PATTERN2 = "^[a-zA-Z0-9_-]{3,15}$";
private static final String REALNAME_PATTERN = "^[a-zA-Z]$";
etlogin_username.addValidator(new RegexpValidator("Must be between 3-15 characters", USERNAME_PATTERN1));
etlogin_username.addValidator(new RegexpValidator("Symbols not allowed", USERNAME_PATTERN2));
etlogin_realname.addValidator(new RegexpValidator("Only alphabets allowed", REALNAME_PATTERN));
NOTE: I know how to user String.length ; but I'd like a regex expression for it as I can pass it to the Validator
, which takes care of a lot of other things
Edit1: Added regex validator:
public class RegexpValidator extends METValidator {
private Pattern pattern;
public RegexpValidator(@NonNull String errorMessage, @NonNull String regex) {
super(errorMessage);
pattern = Pattern.compile(regex);
}
public RegexpValidator(@NonNull String errorMessage, @NonNull Pattern pattern) {
super(errorMessage);
this.pattern = pattern;
}
@Override
public boolean isValid(@NonNull CharSequence text, boolean isEmpty) {
return pattern.matcher(text).matches();
}
}