How to Validate Usernames with Regex in Java

The challenge

Write a simple regex to validate a username. Allowed characters are:

  • lowercase letters,
  • numbers,
  • underscore

Length should be between 4 and 16 characters (both included).

The solution in Java code

Option 1:

public class PasswordValidation { public static boolean validateUsr(String s) { return s.matches("[a-z_\\d]{4,16}"); } }
Code language: Java (java)

Option 2:

import java.util.regex.Pattern; public class PasswordValidation { private static final Pattern usernamePattern = Pattern.compile("[a-z0-9_]{4,16}"); public static boolean validateUsr(String s) { return usernamePattern.matcher(s).matches(); } }
Code language: Java (java)

Option 3:

public class PasswordValidation { public static boolean validateUsr(String s) { return s.matches("[\\p{Ll}\\d\\_]{4,16}"); } }
Code language: Java (java)

Test cases to validate our solution

import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; public class SolutionTest { @Test public void basicTests() { assertEquals(true, PasswordValidation.validateUsr("regex")); assertEquals(false, PasswordValidation.validateUsr("a")); assertEquals(false, PasswordValidation.validateUsr("Hass")); assertEquals(false, PasswordValidation.validateUsr("Hasd_12assssssasasasasasaasasasasas")); assertEquals(false, PasswordValidation.validateUsr("")); assertEquals(true, PasswordValidation.validateUsr("____")); assertEquals(false, PasswordValidation.validateUsr("012")); assertEquals(true, PasswordValidation.validateUsr("p1pp1")); assertEquals(false, PasswordValidation.validateUsr("asd43 34")); assertEquals(true, PasswordValidation.validateUsr("asd43_34")); } @Test public void randomTests() { for (int i=1; i<201;i++) { String testString = makeWord(0,20); assertEquals("Test №"+i+" with string => "+testString, sollution(testString), PasswordValidation.validateUsr(testString)); } } private boolean sollution(String str) { return str.matches("[a-z_\\d]{4,16}"); } private String makeWord(int min, int max) { StringBuilder sb = new StringBuilder(); String possible = "abcdefghijklmnopqrstuvwxyz_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_ 0123456789"; int length = (int)Math.ceil((Math.random() * max) + min); for(int i = 0; i < length; i++) { sb.append(possible.charAt((int)Math.floor(Math.random() * possible.length()))); } return sb.toString(); } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments