Recently, I needed to create a regular expression to validate the format of a comma-separated list of email addresses. Just thought I’d share the result in case it is of use to anyone. The pattern I came up with for matching a single address is as follows:
[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+
Note that I didn’t attempt to handle every possible combination of valid characters – only what I’d consider the most common ones.
The pattern is simply duplicated for the comma-separated list. Here’s an example of applying the pattern in Java:
Pattern addressListPattern = Pattern.compile(String.format("%1$s(,\\s*%1$s)*",
"[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+"),
Pattern.UNICODE_CHARACTER_CLASS);
System.out.println(addressListPattern.matcher("xyz").matches()); // false
System.out.println(addressListPattern.matcher("foo@bar.com").matches()); // true
System.out.println(addressListPattern.matcher("foo@bar.com, xyz").matches()); // false
System.out.println(addressListPattern.matcher("foo@b-ar.com, f.oo@b-ar.co.uk").matches()); // true
System.out.println(addressListPattern.matcher("føo@b-ar.com, f-oo@b-ar.co.uk").matches()); // true
Note that Pattern.UNICODE_CHARACTER_CLASS
is not necessary (or supported) in Android, which supports Unicode character matching by default.
Hope it helps!