You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bs...@apache.org on 2007/11/02 22:49:22 UTC

svn commit: r591485 - /commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java

Author: bspeakmon
Date: Fri Nov  2 14:49:21 2007
New Revision: 591485

URL: http://svn.apache.org/viewvc?rev=591485&view=rev
Log:
- VALIDATOR-203: pushed Pattern compilation to static phase for performance
  (see discussion in jira)
- simplified regexps

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

Modified: commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java
URL: http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java?rev=591485&r1=591484&r2=591485&view=diff
==============================================================================
--- commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java (original)
+++ commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java Fri Nov  2 14:49:21 2007
@@ -90,19 +90,16 @@
      */
     public static final int NO_FRAGMENTS = 1 << 2;
 
-    private static final String ALPHA_CHARS = "a-zA-Z";
-
-    private static final String ALPHA_NUMERIC_CHARS = ALPHA_CHARS + "\\d";
-
     // Drop numeric, and  "+-." for now
-    private static final String AUTHORITY_CHARS = ALPHA_NUMERIC_CHARS + "\\-\\.";
+    private static final String AUTHORITY_CHARS_REGEX = "\\p{Alnum}\\-\\.";
 
     /**
      * This expression derived/taken from the BNF for URI (RFC2396).
      */
-    private static final String URL_PATTERN =
+    private static final String URL_REGEX =
             "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?";
     //                                                                      12            3  4          5       6   7        8 9
+    private static final Pattern URL_PATTERN = Pattern.compile(URL_REGEX);
 
     /**
      * Schema/Protocol (ie. http:, ftp:, file:, etc).
@@ -123,11 +120,13 @@
     /**
      * Protocol (ie. http:, ftp:,https:).
      */
-    private static final String SCHEME_PATTERN = "^\\p{Alpha}[\\p{Alnum}\\+\\-\\.]*";
+    private static final String SCHEME_REGEX = "^\\p{Alpha}[\\p{Alnum}\\+\\-\\.]*";
+    private static final Pattern SCHEME_PATTERN = Pattern.compile(SCHEME_REGEX);
 
-    private static final String AUTHORITY_PATTERN =
-            "^([" + AUTHORITY_CHARS + "]*)(:\\d*)?(.*)?";
+    private static final String AUTHORITY_REGEX =
+            "^([" + AUTHORITY_CHARS_REGEX + "]*)(:\\d*)?(.*)?";
     //                                                                            1                          2  3       4
+    private static final Pattern AUTHORITY_PATTERN = Pattern.compile(AUTHORITY_REGEX);
 
     private static final int PARSE_AUTHORITY_HOST_IP = 1;
 
@@ -138,13 +137,17 @@
      */
     private static final int PARSE_AUTHORITY_EXTRA = 3;
 
-    private static final String PATH_PATTERN = "^(/[-\\w:@&?=+,.!/~*'%$_;\\(\\)]*)?$";
+    private static final String PATH_REGEX = "^(/[-\\w:@&?=+,.!/~*'%$_;\\(\\)]*)?$";
+    private static final Pattern PATH_PATTERN = Pattern.compile(PATH_REGEX);
 
-    private static final String QUERY_PATTERN = "^(.*)$";
+    private static final String QUERY_REGEX = "^(.*)$";
+    private static final Pattern QUERY_PATTERN = Pattern.compile(QUERY_REGEX);
 
-    private static final String LEGAL_ASCII_PATTERN = "^\\p{ASCII}+$";
+    private static final String LEGAL_ASCII_REGEX = "^\\p{ASCII}+$";
+    private static final Pattern ASCII_PATTERN = Pattern.compile(LEGAL_ASCII_REGEX);
 
-    private static final String PORT_PATTERN = "^:(\\d{1,5})$";
+    private static final String PORT_REGEX = "^:(\\d{1,5})$";
+    private static final Pattern PORT_PATTERN = Pattern.compile(PORT_REGEX);
 
     /**
      * Holds the set of current validation options.
@@ -236,14 +239,12 @@
             return false;
         }
 
-        Pattern matchAsciiPat = Pattern.compile(LEGAL_ASCII_PATTERN);
-        if (!matchAsciiPat.matcher(value).matches()) {
+        if (!ASCII_PATTERN.matcher(value).matches()) {
             return false;
-        }        
+        }
 
-        Pattern matchUrlPat = Pattern.compile(URL_PATTERN);
         // Check the whole url address structure
-        Matcher urlMatcher = matchUrlPat.matcher(value);
+        Matcher urlMatcher = URL_PATTERN.matcher(value);
         if (!urlMatcher.matches()) {
             return false;
         }
@@ -284,8 +285,7 @@
             return false;
         }
 
-        Pattern schemePattern = Pattern.compile(SCHEME_PATTERN);
-        if (!schemePattern.matcher(scheme).matches()) {
+        if (!SCHEME_PATTERN.matcher(scheme).matches()) {
             return false;
         }
 
@@ -310,8 +310,7 @@
             return false;
         }
 
-        Pattern authorityPattern = Pattern.compile(AUTHORITY_PATTERN);
-        Matcher authorityMatcher = authorityPattern.matcher(authority);
+        Matcher authorityMatcher = AUTHORITY_PATTERN.matcher(authority);
         if (!authorityMatcher.matches()) {
             return false;
         }
@@ -332,8 +331,7 @@
 
         String port = authorityMatcher.group(PARSE_AUTHORITY_PORT);
         if (port != null) {
-            Pattern portPattern = Pattern.compile(PORT_PATTERN);
-            if (!portPattern.matcher(port).matches()) {
+            if (!PORT_PATTERN.matcher(port).matches()) {
                 return false;
             }
         }
@@ -356,8 +354,7 @@
             return false;
         }
 
-        Pattern pathPattern = Pattern.compile(PATH_PATTERN);
-        if (!pathPattern.matcher(path).matches()) {
+        if (!PATH_PATTERN.matcher(path).matches()) {
             return false;
         }
 
@@ -387,7 +384,7 @@
             return true;
         }
 
-        return Pattern.matches(QUERY_PATTERN, query);
+        return QUERY_PATTERN.matcher(query).matches();
     }
 
     /**