Tải bản đầy đủ (.doc) (336 trang)

JavaCore tutorials

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.38 MB, 336 trang )

Java regular expression
1. How to validate username with regular expression
Remember:
Username Regular Expression Pattern
^[a-z0-9_-]{3,15}$
Description
^ # 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
Whole combination is means, 3 to 15 characters with any lower case character, digit or special
symbol “_-” only. This is common username pattern that’s widely use in different websites.
Example:
UsernameValidator.java
package org.quangthao.validateUser;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UsernameValidator {
private Pattern pattern; //Khuân mẫu
private Matcher matcher; //Khớp(phù hợp)
private static final String USERNAME_PATTERN="^[a-z0-9_-]{3,15}$";
public UsernameValidator(){
pattern=Pattern.compile(USERNAME_PATTERN);
}
public boolean validate(final String username){
matcher=pattern.matcher(username);
return matcher.matches();
}
}
TestUsernameValidator.java
package org.quangthao.validateUser;


public class TestUsernameValidator {
private UsernameValidator usernameValidator;
public TestUsernameValidator(){
usernameValidator=new UsernameValidator();
}
public Object[] ValidUsernameProvider(){
return new Object[]{"mkyong34", "mkyong_2002","mkyong-
2002" ,"mk3-4_yong"};
}
public Object[] InvalidUsernameProvider(){
return new Object[]{"mk","mk@yong","mkyong123456789_-"};
}
public UsernameValidator getUsernameValidator() {
return usernameValidator;
}
public void setUsernameValidator(UsernameValidator usernameValidator) {
this.usernameValidator = usernameValidator;
}
public static void main(String[] args){
TestUsernameValidator test=new TestUsernameValidator();
boolean valid;
Object objectValid[]=test.ValidUsernameProvider();
Object objectInvalid[]=test.InvalidUsernameProvider();
for(int i=0;i<objectValid.length;i++){
valid=test.getUsernameValidator().validate(String.valueOf(objectValid[i]));
System.out.println(objectValid[i]+":"+valid);
}
for(int i=0;i<objectInvalid.length;i++){
valid=test.getUsernameValidator().validate(String.valueOf(objectInvalid[i]));
System.out.println(objectInvalid[i]+":"+valid);

}
}
}
Result:
mkyong34:true
mkyong_2002:true
mkyong-2002:true
mk3-4_yong:true
mk:false
mk@yong:false
mkyong123456789_-:false
Reference:
How to validate username with regular
expression
Posted on November 6, 2009 , Last modified : October 11, 2012
By mkyong
Username Regular Expression Pattern
^[a-z0-9_-]{3,15}$
Description
^ # 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
Whole combination is means, 3 to 15 characters with any lower case character, digit or special
symbol “_-” only. This is common username pattern that’s widely use in different websites.
1. Java Regular Expression Example
UsernameValidator.java
package com.mkyong.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. Username that match:
1. mkyong34
2. mkyong_2002
3. mkyong-2002

4. mk3-4_yong
3. Username that doesn’t match:
1. mk (too short, min 3 characters)
2. mk@yong (“@” character is not allow)
3. mkyong123456789_- (too long, max characters of 15)
4. Unit Test – UsernameValidator
Using testNG to perform unit test.
UsernameValidatorTest.java
package com.mkyong.regex;

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

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

private UsernameValidator usernameValidator;

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

@DataProvider
public Object[][] ValidUsernameProvider() {
return new Object[][]{

{new String[] {
"mkyong34", "mkyong_2002","mkyong-2002" ,"mk3-4_yong"
}}
};
}

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

@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. Unit Test – Result
Username is valid : mkyong34 , true
Username is valid : mkyong_2002 , true
Username is valid : mkyong-2002 , true
Username is valid : mk3-4_yong , true
username is valid : mk , false
username is valid : mk@yong , false
username is valid : mkyong123456789_- , false
PASSED: ValidUsernameTest([Ljava.lang.String;@1d4c61c)
PASSED: InValidUsernameTest([Ljava.lang.String;@116471f)

===============================================
com.mkyong.regexusernameValidatorTest
Tests run: 2, Failures: 0, Skips: 0
===============================================


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

===============================================
2. How to validate password with regular expression
Remember:
Password Regular Expression Pattern
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
Description
( # Start of group
(?=.*\d) # must contains one digit from 0-9
(?=.*[a-z]) # must contains one lowercase characters
(?=.*[A-Z]) # must contains one uppercase characters
(?=.*[@#$%]) # must contains one special symbols in the list "@#$%"
. # match anything with previous condition checking
{6,20} # length at least 6 characters and maximum of 20
) # End of group
?= – means apply the assertion condition, meaningless by itself, always work with other
combination
Whole combination is means, 6 to 20 characters string with at least one digit, one upper case
letter, one lower case letter and one special symbol (“@#$%”). This regular expression pattern is
very useful to implement a strong and complex password.
Example:
PasswordValidator.java
package org.quangthao.passwordvalidate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PasswordValidator {
private Pattern pattern;
private Matcher matcher;
private static final String USERNAME_PATTERN="((?=.*\\d)(?=.*[a-z])(?
=.*[A-Z])(?=.*[@#$%]).{6,20})";
public PasswordValidator(){

pattern=Pattern.compile(USERNAME_PATTERN);
}
public boolean validate(final String username){
matcher=pattern.matcher(username);
return matcher.matches();
}
}
TestPasswordValidator.java
package org.quangthao.passwordvalidate;
import org.quangthao.validateUser.TestUsernameValidator;
public class TestPasswordValidator {
private PasswordValidator passwordvalidator;
public TestPasswordValidator(){
passwordvalidator=new PasswordValidator();
}
public Object[] ValidPasswordProvider(){
return new Object[]{"mkyong1A@", "mkYOn12$"};
}
public Object[] InvalidPasswordProvider(){
return new Object[]{"mY1A@","mkyong12@","mkyoNg12*","mkyonG$
$","MKYONG12$"};
}
public PasswordValidator getPasswordvalidator() {
return passwordvalidator;
}
public void setPasswordvalidator(PasswordValidator passwordvalidator) {
this.passwordvalidator = passwordvalidator;
}
public static void main(String[] args){
TestPasswordValidator test=new TestPasswordValidator();

boolean valid;
Object objectValid[]=test.ValidPasswordProvider();
Object objectInvalid[]=test.InvalidPasswordProvider();
for(int i=0;i<objectValid.length;i++){
valid=test.getPasswordvalidator().validate(String.valueOf(objectValid[i]));
System.out.println(objectValid[i]+":"+valid);
}
for(int i=0;i<objectInvalid.length;i++){
valid=test.getPasswordvalidator().validate(String.valueOf(objectInvalid[i]));
System.out.println(objectInvalid[i]+":"+valid);
}
}
}
Result:
mkyong1A@:true
mkYOn12$:true
mY1A@:false
mkyong12@:false
mkyoNg12*:false
mkyonG$$:false
MKYONG12$:false
Reference:
How to validate password with regular
expression
Posted on November 6, 2009 , Last modified : October 11, 2012
By mkyong
Password Regular Expression Pattern
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
Description
( # Start of group

(?=.*\d) # must contains one digit from 0-9
(?=.*[a-z]) # must contains one lowercase characters
(?=.*[A-Z]) # must contains one uppercase characters
(?=.*[@#$%]) # must contains one special symbols in the list "@#$%"
. # match anything with previous condition checking
{6,20} # length at least 6 characters and maximum of 20
) # End of group
?= – means apply the assertion condition, meaningless by itself, always work with other
combination
Whole combination is means, 6 to 20 characters string with at least one digit, one upper case
letter, one lower case letter and one special symbol (“@#$%”). This regular expression pattern is
very useful to implement a strong and complex password.
P.S The grouping formula order is doesn’t matter.
1. Java Regular Expression Example
PasswordValidator.java
package com.mkyong.regex;

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

public class PasswordValidator{

private Pattern pattern;
private Matcher matcher;

private static final String PASSWORD_PATTERN =
"((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";

public PasswordValidator(){
pattern = Pattern.compile(PASSWORD_PATTERN);

}

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

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

}
}
2. Password that match:
1. mkyong1A@
2. mkYOn12$
3. Password that doesn’t match:
1. mY1A@ , too short, minimum 6 characters
2. mkyong12@ , uppercase characters is required
3. mkyoNg12* , special symbol “*” is not allow here
4. mkyonG$$, digit is required
5. MKYONG12$ , lower case character is required
4. Unit Test – PasswordValidator
Unit test with TestNG.
PasswordValidatorTest.java
package com.mkyong.regex;

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


/**
* Password validator Testing
* @author mkyong
*
*/
public class PasswordValidatorTest {

private PasswordValidator passwordValidator;

@BeforeClass
public void initData(){
passwordValidator = new PasswordValidator();
}

@DataProvider
public Object[][] ValidPasswordProvider() {
return new Object[][]{
{new String[] {
"mkyong1A@", "mkYOn12$",
}}
};
}

@DataProvider
public Object[][] InvalidPasswordProvider() {
return new Object[][]{
{new String[] {
"mY1A@","mkyong12@","mkyoNg12*",
"mkyonG$$","MKYONG12$"

}}
};
}

@Test(dataProvider = "ValidPasswordProvider")
public void ValidPasswordTest(String[] password) {

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

}

@Test(dataProvider = "InvalidPasswordProvider",
dependsOnMethods="ValidPasswordTest")
public void InValidPasswordTest(String[] password) {

for(String temp : password){
boolean valid = passwordValidator.validate(temp);
System.out.println("Password is valid : " + temp + " , " +
valid);
Assert.assertEquals(false, valid);
}
}
}
5. Unit Test – Result
Password is valid : mkyong1A@ , true

Password is valid : mkYOn12$ , true
Password is valid : mY1A@ , false
Password is valid : mkyong12@ , false
Password is valid : mkyoNg12* , false
Password is valid : mkyonG$$ , false
Password is valid : MKYONG12$ , false
PASSED: ValidPasswordTest([Ljava.lang.String;@1d4c61c)
PASSED: InValidPasswordTest([Ljava.lang.String;@116471f)

===============================================
com.mkyong.regex.PasswordValidatorTest
Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
mkyong
Total tests run: 2, Failures: 0, Skips: 0
===============================================
3.How to validate Hex color code with regular expression.
Remenber:
Hexadecimal Color Code Regular Expression Pattern
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
Description
^ #start of the line
# # must constains a "#" symbols
( # start of group #1
[A-Fa-f0-9]{6} # any strings in the list, with length of 6
| # or
[A-Fa-f0-9]{3} # any strings in the list, with length of 3

) # end of group #1
$ #end of the lin0065
Whole combination is means, string must start with a “#” symbol , follow by a letter from “a” to
“f”, “A” to “Z” or a digit from “0″ to 9″ with exactly 6 or 3 length. This regular expression
pattern is very useful for the Hexadecimal web colors code checking.
Example:
HexColorValidator.java
package org.quangthao.hexcolor;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HexColorValidator {
private Pattern pattern;
private Matcher matcher;
private static final String HEX_PATTERN="^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]
{3})$";
public HexColorValidator(){
pattern=Pattern.compile(HEX_PATTERN);
}
public boolean validate(final String hex){
matcher=pattern.matcher(hex);
return matcher.matches();
}
}
TestHexColorValidator.java
package org.quangthao.hexcolor;
import org.quangthao.passwordvalidate.TestPasswordValidator;
public class TestHexColorValidator {
private HexColorValidator hexColorValidator;
public TestHexColorValidator(){
hexColorValidator=new HexColorValidator();

}
public Object[] ValidHexColorProvider(){
return new Object[]{"#1f1f1F", "#AFAFAF","#1AFFa1","#222fff",
"#F00"};
}
public Object[] InvalidHexColorProvider(){
return new Object[]{"mY1A@","mkyong12@","mkyoNg12*","mkyonG$
$","MKYONG12$"};
}
public HexColorValidator getHexColorValidator() {
return hexColorValidator;
}
public void setHexColorValidator(HexColorValidator hexColorValidator) {
this.hexColorValidator = hexColorValidator;
}
public static void main(String[] args){
TestHexColorValidator test=new TestHexColorValidator();
boolean valid;
Object objectValid[]=test.ValidHexColorProvider();
Object objectInvalid[]=test.InvalidHexColorProvider();
for(int i=0;i<objectValid.length;i++){
valid=test.getHexColorValidator().validate(String.valueOf(objectValid[i]));
System.out.println(objectValid[i]+":"+valid);
}
for(int i=0;i<objectInvalid.length;i++){
valid=test.getHexColorValidator().validate(String.valueOf(objectInvalid[i]));
System.out.println(objectInvalid[i]+":"+valid);
}
}
}

Result:
#1f1f1F:true
#AFAFAF:true
#1AFFa1:true
#222fff:true
#F00:true
mY1A@:false
mkyong12@:false
mkyoNg12*:false
mkyonG$$:false
MKYONG12$:false
Reference:
How to validate Hex color code with regular
expression
Posted on October 23, 2009 , Last modified : August 30, 2012
By mkyong
Hexadecimal Color Code Regular Expression Pattern
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
Description
^ #start of the line
# # must constains a "#" symbols
( # start of group #1
[A-Fa-f0-9]{6} # any strings in the list, with length of 6
| # or
[A-Fa-f0-9]{3} # any strings in the list, with length of 3
) # end of group #1
$ #end of the line
Whole combination is means, string must start with a “#” symbol , follow by a letter from “a” to
“f”, “A” to “Z” or a digit from “0″ to 9″ with exactly 6 or 3 length. This regular expression
pattern is very useful for the Hexadecimal web colors code checking.

Java Regular Expression Example
package com.mkyong.regex;

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

public class HexValidator{

private Pattern pattern;
private Matcher matcher;

private static final String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]
{3})$";

public HexValidator(){
pattern = Pattern.compile(HEX_PATTERN);
}

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

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

}
}

Hex code that match:
1. “#1f1f1F”, “#AFAFAF”,”#1AFFa1″,”#222fff”, “#F00″, “#F00″
Hex code that doesn’t match:
1. “123456″ – must start with a “#” symbol
2. “#afafah” – “h” is not allow, valid letter from “a” to “f”
3. “#123abce” – either 6 length or 3 length
4. “aFaE3f” – must start with a “#” symbol, either 6 length or 3 length
5. “F00″ – must start with a “#” symbol
6. “#afaf” – either 6 length or 3 length
7. “#F0h” – “h” is not allow, valid letter from “a” to “f”
Unit Test – HexValidator
package com.mkyong.regex;

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

/**
* Hex validator Testing
* @author mkyong
*
*/
public class HexValidatorTest {

private HexValidator hexValidator;

@BeforeClass
public void initData(){
hexValidator = new HexValidator();
}


@DataProvider
public Object[][] ValidHexProvider() {
return new Object[][]{
{new String[] {
"#1f1f1F", "#AFAFAF","#1AFFa1","#222fff",
"#F00"
}}
};
}

@DataProvider
public Object[][] InvalidHexProvider() {
return new Object[][]{
{new String[] {
"123456","#afafah","#123abce","aFaE3f",
"F00","#afaf", "#F0h"
}}
};
}

@Test(dataProvider = "ValidHexProvider")
public void ValidHexTest(String[] hex) {

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


}

@Test(dataProvider = "InvalidHexProvider",
dependsOnMethods="ValidHexTest")
public void InValidHexTest(String[] hex) {

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

}
}
Unit Test – Result
Hex is valid : #1f1f1F , true
Hex is valid : #AFAFAF , true
Hex is valid : #1AFFa1 , true
Hex is valid : #222fff , true
Hex is valid : #F00 , true
Hex is valid : 123456 , false
Hex is valid : #afafah , false
Hex is valid : #123abce , false
Hex is valid : aFaE3f , false
Hex is valid : F00 , false
Hex is valid : #afaf , false
Hex is valid : #F0h , false
PASSED: ValidHexTest([Ljava.lang.String;@1a626f)
PASSED: InValidHexTest([Ljava.lang.String;@e5855a)


===============================================
com.mkyong.regex.HexValidatorTest
Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
mkyong
Total tests run: 2, Failures: 0, Skips: 0
===============================================
Reference
/>4.How to validate email address with regular expression.
Remember:
Email Regular Expression Pattern
^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*
@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
Description
^ #start of the line
[_A-Za-z0-9-\\+]+ # must start with string in the bracket [ ], must
contains one or more (+)
( # start of group #1
\\.[_A-Za-z0-9-]+ # follow by a dot "." and string in the bracket [
], must contains one or more (+)
)* # end of group #1, this group is optional (*)
@ # must contains a "@" symbol
[A-Za-z0-9-]+ # follow by string in the bracket [ ], must
contains one or more (+)
( # start of group #2 - first level TLD checking
\\.[A-Za-z0-9]+ # follow by a dot "." and string in the

bracket [ ], must contains one or more (+)
)* # end of group #2, this group is optional (*)
( # start of group #3 - second level TLD checking
\\.[A-Za-z]{2,} # follow by a dot "." and string in the
bracket [ ], with minimum length of 2
) # end of group #3
$ #end of the line
The combination means, email address must start with “_A-Za-z0-9-\\+” , optional follow by “.
[_A-Za-z0-9-]“, and end with a “@” symbol. The email’s domain name must start with “A-Za-
z0-9-”, follow by first level Tld (.com, .net) “.[A-Za-z0-9]” and optional follow by a second level
Tld (.com.au, .com.my) “\\.[A-Za-z]{2,}”, where second level Tld must start with a dot “.” and
length must equal or more than 2 characters.
Example:
EmailValidator.java
package org.quangthao.email;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
private Pattern pattern;
private Matcher matcher;
private static final String EMAIL_PATTERN="^[_A-Za-z0-9-\\+]+(\\.[_A-
Za-z0-9-]+)*@"+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
public EmailValidator(){
pattern=Pattern.compile(EMAIL_PATTERN);
}
public boolean validate(final String email){
matcher=pattern.matcher(email);
return matcher.matches();
}
}

TestEmailValidator.java
package org.quangthao.email;
import org.quangthao.hexcolor.HexColorValidator;
import org.quangthao.hexcolor.TestHexColorValidator;
public class TestEmailValidator {
private EmailValidator emailValidator;
public TestEmailValidator(){
emailValidator=new EmailValidator();
}
public Object[] ValidEmailProvider(){
return new Object[]{ "",
"", "",
"", "",
"", "",
"", "",
"" };
}
public Object[] InvalidEmailProvider(){
return new Object[]{ "mkyong", "mkyong@.com.my",
"", "mkyong123@.com",
"mkyong123@.com.com",
"", "mkyong()*@gmail.com", "mkyong@
%*.com",
"mkyong ", "",
"mkyong@", "" } ;
}
public EmailValidator getEmailValidator() {
return emailValidator;
}
public void setEmailValidator(EmailValidator emailValidator) {

this.emailValidator = emailValidator;
}
public static void main(String[] args){
TestEmailValidator test=new TestEmailValidator();
boolean valid;
Object objectValid[]=test.ValidEmailProvider();
Object objectInvalid[]=test.InvalidEmailProvider();
for(int i=0;i<objectValid.length;i++){
valid=test.getEmailValidator().validate(String.valueOf(objectValid[i]));
System.out.println(objectValid[i]+":"+valid);
}
for(int i=0;i<objectInvalid.length;i++){
valid=test.getEmailValidator().validate(String.valueOf(objectInvalid[i]));
System.out.println(objectInvalid[i]+":"+valid);
}
}
}
Result:
:true
:true
:true
:true
:true
:true
:true
:true
:true
:true
mkyong:false
mkyong@.com.my:false

:false
mkyong123@.com:false
mkyong123@.com.com:false
:false
mkyong()*@gmail.com:false
mkyong@%*.com:false
mkyong :false
:false
mkyong@:false
:false
Reference:
How to validate email address with regular
expression
Posted on October 31, 2009 , Last modified : October 9, 2012
By mkyong
Email Regular Expression Pattern
^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*
@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
Description
^ #start of the line
[_A-Za-z0-9-\\+]+ # must start with string in the bracket [ ], must
contains one or more (+)
( # start of group #1
\\.[_A-Za-z0-9-]+ # follow by a dot "." and string in the bracket [
], must contains one or more (+)
)* # end of group #1, this group is optional (*)
@ # must contains a "@" symbol
[A-Za-z0-9-]+ # follow by string in the bracket [ ], must
contains one or more (+)
( # start of group #2 - first level TLD checking

\\.[A-Za-z0-9]+ # follow by a dot "." and string in the
bracket [ ], must contains one or more (+)
)* # end of group #2, this group is optional (*)
( # start of group #3 - second level TLD checking
\\.[A-Za-z]{2,} # follow by a dot "." and string in the
bracket [ ], with minimum length of 2
) # end of group #3
$ #end of the line
The combination means, email address must start with “_A-Za-z0-9-\\+” , optional follow by “.
[_A-Za-z0-9-]“, and end with a “@” symbol. The email’s domain name must start with “A-Za-
z0-9-”, follow by first level Tld (.com, .net) “.[A-Za-z0-9]” and optional follow by a second level
Tld (.com.au, .com.my) “\\.[A-Za-z]{2,}”, where second level Tld must start with a dot “.” and
length must equal or more than 2 characters.
1. Java Regular Expression Example
Here’s a Java example to show you how to use regex to validate email address.
EmailValidator.java
package com.mkyong.regex;

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

public class EmailValidator {

private Pattern pattern;
private Matcher matcher;

private static final String EMAIL_PATTERN =
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";


public EmailValidator() {
pattern = Pattern.compile(EMAIL_PATTERN);
}

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

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

}
}
2. Valid Emails
1. , ,
2. , ,
3. ,
4. ,
3. Invalid Emails
1. mkyong – must contains “@” symbol
2. mkyong@.com.my – tld can not start with dot “.”
3. – “.a” is not a valid tld, last tld must contains at least two characters
4. mkyong123@.com – tld can not start with dot “.”
5. mkyong123@.com.com – tld can not start with dot “.”
6. – email’s first character can not start with dot “.”

7. mkyong()*@gmail.com – email’s is only allow character, digit, underscore and dash
8. mkyong@%*.com – email’s tld is only allow character and digit
9. mkyong – double dots “.” are not allow
10. – email’s last character can not end with dot “.”
11. mkyong@ – double “@” is not allow
12. -email’s tld which has two characters can not contains digit
4. Unit Test
Here’s a unit test using testNG.
EmailValidatorTest.java
package com.mkyong.regex;

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

/**
* Email validator Testing
*
* @author mkyong
*
*/
public class EmailValidatorTest {

private EmailValidator emailValidator;

@BeforeClass
public void initData() {
emailValidator = new EmailValidator();
}

@DataProvider

public Object[][] ValidEmailProvider() {
return new Object[][] { { new String[] { "",
"", "",
"", "",
"", "",
"", "",
"" } } };
}

@DataProvider
public Object[][] InvalidEmailProvider() {
return new Object[][] { { new String[] { "mkyong",
"mkyong@.com.my",
"", "mkyong123@.com",
"mkyong123@.com.com",
"", "mkyong()*@gmail.com", "mkyong@
%*.com",
"mkyong ", "",
"mkyong@", "" } } };
}

@Test(dataProvider = "ValidEmailProvider")
public void ValidEmailTest(String[] Email) {

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


}

@Test(dataProvider = "InvalidEmailProvider", dependsOnMethods =
"ValidEmailTest")
public void InValidEmailTest(String[] Email) {

for (String temp : Email) {
boolean valid = emailValidator.validate(temp);
System.out.println("Email is valid : " + temp + " , " +
valid);
Assert.assertEquals(valid, false);
}
}
}
Here’s the unit test result.
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : , true
Email is valid : mkyong , false
Email is valid : mkyong@.com.my , false
Email is valid : , false
Email is valid : mkyong123@.com , false

Email is valid : mkyong123@.com.com , false
Email is valid : , false
Email is valid : mkyong()*@gmail.com , false
Email is valid : mkyong@%*.com , false
Email is valid : mkyong , false
Email is valid : , false
Email is valid : mkyong@ , false
Email is valid : , false
PASSED: ValidEmailTest([Ljava.lang.String;@15f48262)
PASSED: InValidEmailTest([Ljava.lang.String;@789934d4)

===============================================
Default test
Tests run: 2, Failures: 0, Skips: 0
===============================================
References
1.
2.
5.How to validate image file extension with regular expression.
Remember:
Image File Extension Regular Expression Pattern
([^\s]+(\.(?i)(jpg|png|gif|bmp))$)
Description
( #Start of the group #1
[^\s]+ # must contains one or more anything (except white
space)
( # start of the group #2
\. # follow by a dot "."
(?i) # ignore the case sensive checking for the
following characters

( # start of the group #3
jpg # contains characters "jpg"

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×