Index: sites/all/modules/contrib/purl/purl.module
===================================================================
--- sites/all/modules/contrib/purl/purl.module	(revision 1966)
+++ sites/all/modules/contrib/purl/purl.module	(working copy)
@@ -479,14 +479,20 @@
  */
 function purl_validate($modifier) {
   // Check that the value is valid
-  if (check_plain($modifier['provider']) && !empty($modifier['value']) && preg_match('!^[a-z0-9_-]+$!', $modifier['value']) && !menu_get_item($modifier['value'])) {
-    $id = db_result(db_query("SELECT id FROM {purl} WHERE value = '%s'", $modifier['value']));
-    if (!$id) {
-      return true;
+  if (check_plain($modifier['provider']) && !empty($modifier['value']) && !menu_get_item($modifier['value'])) {
+
+  	//Allow Processor to determine the format it will accept
+    $processor = purl_get_processor(variable_get('purl_method_'. $modifier['provider'], PURL_PATH));  //Retrieve processor
+    $modifier_regex = isset($processor->modifier_regex)?$processor->modifier_regex : '!^[a-z0-9_-]+$!'; //Use processor regex or default
+    if(preg_match($modifier_regex, $modifier['value'])){
+	    $id = db_result(db_query("SELECT id FROM {purl} WHERE value = '%s'", $modifier['value']));
+	    if (!$id) {
+	      return true;
+	    }
+	    else if (isset($modifier['id']) && ($id == $modifier['id'])) {
+	      return true;
+	    }
     }
-    else if (isset($modifier['id']) && ($id == $modifier['id'])) {
-      return true;
-    }
   }
   return false;
 }
