You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2011/05/27 23:37:59 UTC

svn commit: r1128469 - /commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/EmailValidator.java

Author: nick
Date: Fri May 27 21:37:58 2011
New Revision: 1128469

URL: http://svn.apache.org/viewvc?rev=1128469&view=rev
Log:
VALIDATOR-191 Remove ORO dependency from the old Email Validator

Modified:
    commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/EmailValidator.java

Modified: commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/EmailValidator.java
URL: http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/EmailValidator.java?rev=1128469&r1=1128468&r2=1128469&view=diff
==============================================================================
--- commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/EmailValidator.java (original)
+++ commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/EmailValidator.java Fri May 27 21:37:58 2011
@@ -17,7 +17,6 @@
 package org.apache.commons.validator;
 
 import org.apache.commons.validator.routines.InetAddressValidator;
-import org.apache.oro.text.perl.Perl5Util;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -44,21 +43,20 @@ import java.util.regex.Pattern;
  */
 public class EmailValidator {
 
-    private static final String SPECIAL_CHARS = "\\000-\\037\\(\\)<>@,;:'\\\\\\\"\\.\\[\\]\\177";
+    private static final String SPECIAL_CHARS = "\\p{Cntrl}\\(\\)<>@,;:'\\\\\\\"\\.\\[\\]";
     private static final String VALID_CHARS = "[^\\s" + SPECIAL_CHARS + "]";
     private static final String QUOTED_USER = "(\"[^\"]*\")";
     private static final String ATOM = VALID_CHARS + '+';
     private static final String WORD = "((" + VALID_CHARS + "|')+|" + QUOTED_USER + ")";
 
-    // Each pattern must be surrounded by /
-    private static final String LEGAL_ASCII_PATTERN = "/^[\\000-\\177]+$/";
-    private static final String EMAIL_PATTERN = "/^(.+)@(.+)$/";
-    private static final String IP_DOMAIN_PATTERN = "^\\[(.*)\\]$";
-    private static final String TLD_PATTERN = "/^([a-zA-Z]+)$/";
+    private static final Pattern LEGAL_ASCII_PATTERN = Pattern.compile("^\\p{ASCII}+$");
+    private static final Pattern EMAIL_PATTERN = Pattern.compile("^(.+)@(.+)$");
+    private static final Pattern IP_DOMAIN_PATTERN = Pattern.compile("^\\[(.*)\\]$");
+    private static final Pattern TLD_PATTERN = Pattern.compile("^([a-zA-Z]+)$");
             
-    private static final String USER_PATTERN = "/^\\s*" + WORD + "(\\." + WORD + ")*$/";
-    private static final String DOMAIN_PATTERN = "/^" + ATOM + "(\\." + ATOM + ")*\\s*$/";
-    private static final String ATOM_PATTERN = "/(" + ATOM + ")/";
+    private static final Pattern USER_PATTERN = Pattern.compile("^\\s*" + WORD + "(\\." + WORD + ")*$");
+    private static final Pattern DOMAIN_PATTERN = Pattern.compile("^" + ATOM + "(\\." + ATOM + ")*\\s*$");
+    private static final Pattern ATOM_PATTERN = Pattern.compile("(" + ATOM + ")");
 
     /**
      * Singleton instance of this class.
@@ -100,8 +98,7 @@ public class EmailValidator {
         boolean symbolic = false;
 
         // see if domain is an IP address in brackets
-        Pattern ipDomainPattern = Pattern.compile(IP_DOMAIN_PATTERN);
-        Matcher ipDomainMatcher = ipDomainPattern.matcher(domain);
+        Matcher ipDomainMatcher = IP_DOMAIN_PATTERN.matcher(domain);
 
         if (ipDomainMatcher.matches()) {
             InetAddressValidator inetAddressValidator =
@@ -111,8 +108,7 @@ public class EmailValidator {
             }
         } else {
             // Domain is symbolic name
-            Perl5Util domainMatcher = new Perl5Util();
-            symbolic = domainMatcher.match(DOMAIN_PATTERN, domain);
+            symbolic = DOMAIN_PATTERN.matcher(domain).matches();
         }
 
         if (symbolic) {
@@ -132,16 +128,16 @@ public class EmailValidator {
      * @return true if the user name is valid.
      */
     protected boolean isValidUser(String user) {
-        Perl5Util userMatcher = new Perl5Util();
-        return userMatcher.match(USER_PATTERN, user);
+        return USER_PATTERN.matcher(user).matches(); 
     }
 
     /**
      * Validates an IP address. Returns true if valid.
-     * @param ipAddressMatcher Pattren matcher
+     * @param ipAddress IP address
      * @return true if the ip address is valid.
      */
-    protected boolean isValidIpAddress(Perl5Util ipAddressMatcher) {
+    protected boolean isValidIpAddress(String ipAddress) {
+        Matcher ipAddressMatcher = IP_DOMAIN_PATTERN.matcher(ipAddress);
         for (int i = 1; i <= 4; i++) {
             String ipSegment = ipAddressMatcher.group(i);
             if (ipSegment == null || ipSegment.length() <= 0) {
@@ -173,9 +169,9 @@ public class EmailValidator {
         String[] domainSegment = new String[10];
         boolean match = true;
         int i = 0;
-        Perl5Util atomMatcher = new Perl5Util();
+        Matcher atomMatcher = ATOM_PATTERN.matcher(domain);
         while (match) {
-            match = atomMatcher.match(ATOM_PATTERN, domain);
+            match = atomMatcher.matches();
             if (match) {
                 domainSegment[i] = atomMatcher.group(1);
                 int l = domainSegment[i].length() + 1;
@@ -199,8 +195,7 @@ public class EmailValidator {
         // list
         String tld = domainSegment[len - 1];
         if (tld.length() > 1) {
-            Perl5Util matchTldPat = new Perl5Util();
-            if (!matchTldPat.match(TLD_PATTERN, tld)) {
+            if (! TLD_PATTERN.matcher(tld).matches()) {
                 return false;
             }
         } else {
@@ -218,17 +213,13 @@ public class EmailValidator {
      * @return address with comments removed.
     */
     protected String stripComments(String emailStr)  {
-     String input = emailStr;
      String result = emailStr;
-     String commentPat = "s/^((?:[^\"\\\\]|\\\\.)*(?:\"(?:[^\"\\\\]|\\\\.)*\"(?:[^\"\\\\]|\111111\\\\.)*)*)\\((?:[^()\\\\]|\\\\.)*\\)/$1 /osx";
-     Perl5Util commentMatcher = new Perl5Util();
-     result = commentMatcher.substitute(commentPat,input);
-     // This really needs to be =~ or Perl5Matcher comparison
-     while (!result.equals(input)) {
-        input = result;
-        result = commentMatcher.substitute(commentPat,input);
+     String commentPat = "^((?:[^\"\\\\]|\\\\.)*(?:\"(?:[^\"\\\\]|\\\\.)*\"(?:[^\"\\\\]|\111111\\\\.)*)*)\\((?:[^()\\\\]|\\\\.)*\\)/";
+     Pattern commentMatcher = Pattern.compile(commentPat);
+     
+     while (commentMatcher.matcher(result).matches()) {
+        result.replaceFirst(commentPat, "\1 ");
      }
      return result;
-
     }
 }