I’m trying to create a Regex String with the following rules
- The username is between 4 and 25 characters.
- It must start with a letter.
- It can only contain letters, numbers, and the underscore character.
- It cannot end with an underscore character.
when it meets this criterion I want the output to be true otherwise false, but I only get false for my test cases, here is my code
JavaScript
x
public class Profile {
public static String username(String str) {
String regularExpression = "^[a-zA-Z][a-zA-Z0-9_](?<=@)\w+\b(?!\_){4,25}$";
if (str.matches(regularExpression)) {
str = "true";
}
else if (!str.matches(regularExpression)) {
str = "false";
}
return str;
}
Main class
JavaScript
Profile profile = new profile();
Scanner s = new Scanner(System.in);
System.out.print(profile.username(s.nextLine()));
input
JavaScript
"aa_"
"u__hello_world123"
output
JavaScript
false
false
Fixed: thanks to everyone who contributed
Advertisement
Answer
You can use
JavaScript
^[a-zA-Z][a-zA-Z0-9_]{3,24}$(?<!_)
^[a-zA-Z]w{3,24}$(?<!_)
^[a-zA-Z][a-zA-Z0-9_]{2,23}[a-zA-Z0-9]$
^p{Alpha}[a-zA-Z0-9_]{2,23}p{Alnum}$
See the regex demo.
Details:
^
– start of string[a-zA-Z]
– an ASCII letter[a-zA-Z0-9_]{3,24}
/w{3,24}
– three to twenty four ASCII letters, digits or underscores$
– end of string(?<!_)
– a negative lookbehind that makes sure there is no_
(at the end of string).
Note that {3,24}
is used and not {4,25}
because the first [a-zA-Z]
pattern already matches a single char.
Usage:
JavaScript
public static String username(String str) {
return Boolean.toString( str.trim().matches("[a-zA-Z]\w{3,24}$(?<!_)") );
// return Boolean.toString( str.trim().matches("\p{Alpha}[a-zA-Z0-9_]{2,23}\p{Alnum}") );
// return Boolean.toString( str.trim().matches("[a-zA-Z][a-zA-Z0-9_]{2,23}[a-zA-Z0-9]") );
}
See Java demo:
JavaScript
import java.util.*;
import java.util.regex.*;
class Ideone
{
public static String username(String str) {
return Boolean.toString( str.trim().matches("[a-zA-Z]\w{3,24}$(?<!_)") );
}
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(username("u__hello_world123")); // => true
System.out.println(username("aa_")); // => false
}
}