Java regex email

后端 未结 20 2606
清歌不尽
清歌不尽 2020-11-22 13:09

First of all, I know that using regex for email is not recommended but I gotta test this out.

I have this regex:

\\b[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]         


        
20条回答
  •  北荒
    北荒 (楼主)
    2020-11-22 13:26

    Regex for Facebook-like validation:

    public static final String REGEX_EMAIL_VALIDATION = "^[\\w-\\+]+(\\.[\\w]+)*@[\\w-]+(\\.[\\w]+)*(\\.[a-zA-Z]{2,})$";
    

    Dto for Unit tests(with Lombok):

    @Data
    @Accessors(chain = true)
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public class UserCreateDto {
    
        @NotNull
        @Pattern(regexp = REGEX_EMAIL_VALIDATION)
        @Size(min = 1, max = 254)
        String email;
    }
    

    Valid/invalid emails below with Unit tests:

    public class UserCreateValidationDtoTest {
    
    private static final String[] VALID_EMAILS = new String[]{"email@yahoo.com", "email-100@yahoo.com",
            "Email.100@yahoo.com", "email111@email.com", "email-100@email.net",
            "email.100@email.com.au", "emAil@1.com", "email@gmail.com.com",
            "email+100@gmail.com", "emAil-100@yahoo-test.com", "email_100@yahoo-test.ABC.CoM"};
    private static final String[] INVALID_EMAILS = new String[]{"あいうえお@example.com", "email@111",
            "email", "email@.com.my", "email123@gmail.", "email123@.com", "email123@.com.com",
            ".email@email.com", "email()*@gmAil.com", "eEmail()*@gmail.com", "email@%*.com", "email..2002@gmail.com",
            "email.@gmail.com", "email@email@gmail.com", "email@gmail.com."};
    private Validator validator;
    
    @Before
    public void setUp() throws Exception {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        validator = factory.getValidator();
    }
    
    @Test
    public void emailValidationShouldBeValid() throws Exception {
        Arrays.stream(VALID_EMAILS)
                .forEach(email -> {
                            Set> violations = validateEmail(
                                    new UserCreateDto().setEmail(email));
                            System.out.println("Email: " + email + ", violations: " + violations);
                            Assert.assertTrue(violations.isEmpty());
                        }
                );
    }
    
    @Test
    public void emailValidationShouldBeNotValid() throws Exception {
        Arrays.stream(INVALID_EMAILS)
                .forEach(email -> {
                            Set> violations = validateEmail(
                                    new UserCreateDto().setEmail(email));
                            System.out.println("Email: " + email + ", violations: " + violations);
                            Assert.assertTrue(!violations.isEmpty());
                        }
                );
    }
    
    
    private Set> validateEmail(UserCreateDto user) {
        String emailFieldName = "email";
        return validator.validateProperty(user, emailFieldName);
    }
    

    }

提交回复
热议问题