You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by ke...@apache.org on 2004/05/17 13:53:59 UTC

cvs commit: jakarta-lucene-sandbox/contributions/javascript/queryValidator luceneQueryValidator.js

kelvint     2004/05/17 04:53:59

  Modified:    contributions/javascript/queryValidator
                        luceneQueryValidator.js
  Log:
  Added backslash to list of allowed characters.
  Implemented checkANDORNOT, with thanks to Michel Valade (m_valade at hotmail.com)
  for suggested change to the regex.
  
  Revision  Changes    Path
  1.9       +23 -21    jakarta-lucene-sandbox/contributions/javascript/queryValidator/luceneQueryValidator.js
  
  Index: luceneQueryValidator.js
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene-sandbox/contributions/javascript/queryValidator/luceneQueryValidator.js,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- luceneQueryValidator.js	26 Mar 2004 07:43:22 -0000	1.8
  +++ luceneQueryValidator.js	17 May 2004 11:53:59 -0000	1.9
  @@ -103,10 +103,10 @@
   
   function checkAllowedCharacters(query)
   {
  -  matches = query.match(/[^a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#$%'= ]/);
  +  matches = query.match(/[^a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#/$%'= ]/);
     if(matches != null && matches.length > 0)
     {
  -    if(alertUser) alert("Invalid search query! The allowed characters are a-z A-Z 0-9.  _ + - : () \" & * ? | ! {} [ ] ^ ~ \\ @ = # % $ '. Please try again.")
  +    if(alertUser) alert("Invalid search query! The allowed characters are a-z A-Z 0-9.  _ + - : () \" & * ? | ! {} [ ] ^ ~ \\ @ = # % $ ' /. Please try again.")
       return false;
     }
     return true;
  @@ -129,7 +129,7 @@
     matches = query.match(/[&]{2}/);
     if(matches != null && matches.length > 0)
     {
  -    matches = query.match(/^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#$%'=]+( && )?[a-zA-Z0-9_+\-:.()\"*?|!{}\[\]\^~\\@#$%'=]+[ ]*)+$/); // note missing & in pattern
  +    matches = query.match(/^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#/$%'=]+( && )?[a-zA-Z0-9_+\-:.()\"*?|!{}\[\]\^~\\@#/$%'=]+[ ]*)+$/); // note missing & in pattern
       if(matches == null)
       {
         if(alertUser) alert("Invalid search query! Queries containing the special characters && must be in the form: term1 && term2. Please try again.")
  @@ -141,7 +141,7 @@
   
   function checkCaret(query)
   {
  -  //matches = query.match(/^[^\^]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\~\\@#]+(\^[\d]+)?[ ]*)+$/); // note missing ^ in pattern
  +  //matches = query.match(/^[^\^]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\~\\@#/]+(\^[\d]+)?[ ]*)+$/); // note missing ^ in pattern
     matches = query.match(/[^\\]\^([^\s]*[^0-9.]+)|[^\\]\^$/);
     if(matches != null)
     {
  @@ -153,7 +153,7 @@
   
   function checkSquiggle(query)
   {
  -  //matches = query.match(/^[^~]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^\\@#]+(~[\d.]+|[^\\]\\~)?[ ]*)+$/); // note missing ~ in pattern
  +  //matches = query.match(/^[^~]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^\\@#/]+(~[\d.]+|[^\\]\\~)?[ ]*)+$/); // note missing ~ in pattern
     matches = query.match(/[^\\]~[^\s]*[^0-9\s]+/);
     if(matches != null)
     {
  @@ -165,19 +165,22 @@
   
   function checkExclamationMark(query)
   {
  -  // NB: doesn't handle term1 ! term2 ! term3
  -  matches = query.match(/^[^!]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#$%'=]+( ! )?[a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#$%'=]+[ ]*)+$/);
  +  // foo! is not a query, but !foo is. hmmmm...
  +  // NB: doesn't handle term1 ! term2 ! term3 or term1 !term2
  +  matches = query.match(/^[^!]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#/$%'=]+( ! )?[a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#/$%'=]+[ ]*)+$/);
     if(matches == null || matches.length == 0)
     {
       if(alertUser) alert("Invalid search query! Queries containing the special character ! must be in the form: term1 ! term2. Please try again.")
       return false;
  -  }    
  +  }
  +  
  +  
     return true;
   }
   
   function checkQuestionMark(query)
   {
  -  matches = query.match(/^(\?)|([^a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#$%'=]\?+)/);
  +  matches = query.match(/^(\?)|([^a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#/$%'=]\?+)/);
     if(matches != null && matches.length > 0)
     {
         if(alertUser) alert("Invalid search query! The question mark (?) character must be preceded by at least one alphabet or number. Please try again.")
  @@ -223,7 +226,7 @@
   
   function checkPlusMinus(query)
   {
  -  matches = query.match(/^[^\n+\-]*$|^([+-]?[a-zA-Z0-9_:.()\"*?&|!{}\[\]\^~\\@#$%'=]+[ ]?)+$/);
  +  matches = query.match(/^[^\n+\-]*$|^([+-]?[a-zA-Z0-9_:.()\"*?&|!{}\[\]\^~\\@#/$%'=]+[ ]?)+$/);
     if(matches == null || matches.length == 0)
     {
       if(alertUser) alert("Invalid search query! '+' and '-' modifiers must be followed by at least one alphabet or number. Please try again.")
  @@ -237,21 +240,20 @@
     matches = query.match(/AND|OR|NOT/);
     if(matches != null && matches.length > 0)
     {
  -    // I've no idea why the code below doesn't work since it's identical to the exclamation mark and && RE    
  -    //matches = query.match(/^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#]+(?: AND )?(?: OR )?(?: NOT )?[a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#]+[ ]*)+$/);
  -
  -    // we'll notify the user that this query is not validated and an error may result
  -    if(alertUser)
  +    matches = query.match(/^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@/#$%'=]+\s*((AND )|(OR )|(AND NOT )|(NOT ))?[a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@/#$%'=]+[ ]*)+$/);       
  +    if(matches == null || matches.length == 0)
       {
  -      return confirm("Validation for queries containing AND/OR/NOT is currently not supported. If your query is not well-formed, an error may result.");
  +      if(alertUser) alert("Invalid search query!  Queries containing AND/OR/NOT must be in the form: term1 AND|OR|NOT|AND NOT term2 Please try again.")
  +      return false;
       }
  -    /*
  -    if(matches == null || matches.length == 0)
  +    
  +    // its difficult to distinguish AND/OR/... from the usual [a-zA-Z] because they're...words!
  +    matches = query.match(/^((AND )|(OR )|(AND NOT )|(NOT ))|((AND)|(OR)|(AND NOT )|(NOT))[ ]*$/)
  +    if(matches != null && matches.length > 0)
       {
  -      if(alertUser) alert("Invalid search query!  Queries containing AND/OR/NOT must be in the form: term1 AND|OR|NOT term2 Please try again.")
  +      if(alertUser) alert("Invalid search query!  Queries containing AND/OR/NOT must be in the form: term1 AND|OR|NOT|AND NOT term2 Please try again.")
         return false;
       }
  -    */
     }
     return true;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org