Как проверить имя пользователя с помощью регулярного выражения

Как проверить имя пользователя с помощью регулярного выражения

Шаблон регулярного выражения имени пользователя

^[a-z0-9_-]{3,15}$

Описание

^                    # Start of the line
  [a-z0-9_-]         # Match characters and symbols in the list, a-z, 0-9, underscore, hyphen
             {3,15}  # Length at least 3 characters and maximum length of 15
$                    # End of the line

Целая комбинация означает от 3 до 15 символов с любым символом нижнего регистра, цифрой или специальным символом «_-». Это распространенный шаблон имени пользователя, который широко используется на разных веб-сайтах.

1. Пример регулярного выражения Java

UsernameValidator.java

package com.example.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UsernameValidator{

      private Pattern pattern;
      private Matcher matcher;

      private static final String USERNAME_PATTERN = "^[a-z0-9_-]{3,15}$";

      public UsernameValidator(){
          pattern = Pattern.compile(USERNAME_PATTERN);
      }

      /**
       * Validate username with regular expression
       * @param username username for validation
       * @return true valid username, false invalid username
       */
      public boolean validate(final String username){

          matcher = pattern.matcher(username);
          return matcher.matches();

      }
}

2. Соответствующее имя пользователя:

1. example34
2. example_2002
3. пример-2002
4. mk3-4_yong

3. Имя пользователя не соответствует:

1. mk (слишком коротко, минимум 3 символа)
2. mk @ yong (использование символа «@» запрещено)
3. example123456789_- (слишком длинный, не более 15 символов)

4. Модульный тест - UsernameValidator

Использование testNG для выполнения модульного теста.

UsernameValidatorTest.java

package com.example.regex;

import org.testng.Assert;
import org.testng.annotations.*;

/**
 * Username validator Testing
 * @author example
 *
 */
public class UsernameValidatorTest {

    private UsernameValidator usernameValidator;

    @BeforeClass
        public void initData(){
        usernameValidator = new UsernameValidator();
        }

    @DataProvider
    public Object[][] ValidUsernameProvider() {
        return new Object[][]{
           {new String[] {
                 "example34", "example_2002","example-2002" ,"mk3-4_yong"
           }}
                };
    }

    @DataProvider
    public Object[][] InvalidUsernameProvider() {
        return new Object[][]{
           {new String[] {
             "mk","mk@yong","example123456789_-"
           }}
            };
    }

    @Test(dataProvider = "ValidUsernameProvider")
    public void ValidUsernameTest(String[] Username) {

       for(String temp : Username){
        boolean valid = usernameValidator.validate(temp);
        System.out.println("Username is valid : " + temp + " , " + valid);
        Assert.assertEquals(true, valid);
       }

    }

    @Test(dataProvider = "InvalidUsernameProvider",
                 dependsOnMethods="ValidUsernameTest")
    public void InValidUsernameTest(String[] Username) {

       for(String temp : Username){
        boolean valid = usernameValidator.validate(temp);
        System.out.println("username is valid : " + temp + " , " + valid);
        Assert.assertEquals(false, valid);
       }

    }
}

5. Модульный тест - результат

Username is valid : example34 , true
Username is valid : example_2002 , true
Username is valid : example-2002 , true
Username is valid : mk3-4_yong , true
username is valid : mk , false
username is valid : mk@yong , false
username is valid : example123456789_- , false
PASSED: ValidUsernameTest([Ljava.lang.String;@1d4c61c)
PASSED: InValidUsernameTest([Ljava.lang.String;@116471f)

===============================================
    com.example.regex.UsernameValidatorTest
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
example
Total tests run: 2, Failures: 0, Skips: 0
===============================================