diff --git a/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java b/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java index ab301f42f..715090d9b 100644 --- a/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java +++ b/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java @@ -29,8 +29,8 @@ import java.util.regex.Pattern; */ public final class EmailDoCoMoResultParser extends AbstractDoCoMoResultParser { - private static final Pattern ATEXT_ALPHANUMERIC = Pattern.compile("[a-zA-Z0-9@.!#$%&'*+\\-/=?^_`{|}~]+"); - + private static final Pattern EMAIL = Pattern.compile("^[^:]+@([0-9a-zA-Z\\\\-]+\\.)+[0-9a-zA-Z\\\\-]{2,}$"); + @Override public EmailAddressParsedResult parse(Result result) { String rawText = getMassagedText(result); @@ -58,7 +58,7 @@ public final class EmailDoCoMoResultParser extends AbstractDoCoMoResultParser { * in a barcode, not "judge" it. */ static boolean isBasicallyValidEmailAddress(String email) { - return email != null && ATEXT_ALPHANUMERIC.matcher(email).matches() && email.indexOf('@') >= 0; + return email != null && EMAIL.matcher(email).matches(); } } diff --git a/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java b/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java index 28e5da74e..5cf4ea945 100644 --- a/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java +++ b/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java @@ -28,12 +28,30 @@ import org.junit.Test; */ public final class EmailAddressParsedResultTestCase extends Assert { + @Test + public void testEmailAddresses() { + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress(null)); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123.365.com")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("abc.def.com")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@abcd.c")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab,cd.com")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab#cd.com")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab!#cd.com")); + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab_cd.com")); + assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@abcd.com")); + assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab-cd.com")); + assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("abc.456@ab-cd.com")); + assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("建設省.456@ab-cd.com")); + } + @Test public void testEmailAddress() { doTest("srowen@example.org", "srowen@example.org", null, null); doTest("mailto:srowen@example.org", "srowen@example.org", null, null); } + @Test public void testTos() { doTest("mailto:srowen@example.org,bob@example.org",