

/*******************************************************************************

FILE: RegExpValidate.js



AUTHOR: Karen Gayda



DATE: 06/11/2000



EMAIL: KGayda@yahoo.com



DESCRIPTION: This file contains a library of validation functions

  using javascript regular expressions.  Library also contains functions that re-

  format fields for display or for storage.

  



  VALIDATION FUNCTIONS:



  validateCurrency - checks for valid currency format

  validateTime - checks for valid 12 hour time

  validateState -  checks for valid state abbreviation  

  validateSSN - checks format of social security number

  validateEmail - checks format of email address

  validateUSPhone - checks format of US phone number

  validateNumeric - checks for valid numeric value

  validateInteger - checks for valid integer value

  validateNotEmpty - checks for blank form field

  validateUSZip - checks for valid US zip code

  validateUSDate - checks for valid date in US format

  validateValue - checks a string against supplied pattern

  

  FORMAT FUNCTIONS:

  

  rightTrim - removes trailing spaces from a string

  leftTrim - removes leading spaces from a string

  trimAll - removes leading and trailing spaces from a string

  removeCurrency - removes currency formatting characters (), $ 

  addCurrency - inserts currency formatting characters

  removeCommas - removes comma separators from a number

  addCommas - adds comma separators to a number

  removeCharacters - removes characters from a string that match passed pattern

*******************************************************************************/





function validateCurrency( strValue)  {

/************************************************

DESCRIPTION: Validates that a string contains a 

  valid currency format. 

  

 PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

*************************************************/

  var objRegExp = /(^\$\d{1,3}(,\d{3})*\.\d{2}$)|(^\(\$\d{1,3}(,\d{3})*\.\d{2}\)$)/;



  return objRegExp.test( strValue );

}



function validateTime ( strValue ) {

/************************************************

DESCRIPTION: Validates that a string contains a 

  valid 12 hour time format. Seconds are optional.

  

 PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.



REMARKS: Returns True for time formats such as:

  HH:MM or HH:MM:SS or HH:MM:SS.mmm (where the

  .mmm is milliseconds as used in SQL Server 

  datetime datatype.  Also, the .mmm portion will 

  accept 1 to 3 digits after the period)

*************************************************/

  var objRegExp = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/;



  return objRegExp.test( strValue );



}



function validateState (strValue ) {

/************************************************

DESCRIPTION: Validates that a string contains a 

  valid state abbreviation. 

  

 PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

*************************************************/



var objRegExp = /^(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i; 



  return objRegExp.test(strValue);

}



function validateSSN( strValue ) {

/************************************************

DESCRIPTION: Validates that a string contains a 

  valid social security number. 

  

 PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

*************************************************/

var objRegExp  = /^\d{3}\-\d{2}\-\d{4}$/;

 

  //check for valid SSN

  return objRegExp.test(strValue);



}





function validateEmail( strValue) {

/************************************************

DESCRIPTION: Validates that a string contains a 

  valid email pattern. 

  

 PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

   

REMARKS: Accounts for email with country appended

  does not validate that email contains valid URL

  type (.com, .gov, etc.) and optionally,

  a valid country suffix.  Since email has many

  forms this expression only tests for near valid

  address.  Some additional validation may be

  required.

*************************************************/

var objRegExp  = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;

  //check for valid email

  return objRegExp.test(strValue);

}



function validateUSPhone( strValue ) {

/************************************************

DESCRIPTION: Validates that a string contains valid

  US phone pattern. 

  Ex. (999) 999-9999 or (999)999-9999

  

PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

*************************************************/

  var objRegExp  = /^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/;

 

  //check for valid us phone with or without space between 

  //area code

  return objRegExp.test(strValue); 

}



function  validateNumeric( strValue ) {

/******************************************************************************

DESCRIPTION: Validates that a string contains only valid numbers.



PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

******************************************************************************/

  var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/; 

 

  //check for numeric characters 

  return objRegExp.test(strValue);

}



function validateInteger( strValue ) {

/************************************************

DESCRIPTION: Validates that a string contains only 

    valid integer number.

    

PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

******************************************************************************/

  var objRegExp  = /(^-?\d\d*$)/;

 

  //check for integer characters

  return objRegExp.test(strValue);

}



function validateNotEmpty( strValue ) {

/************************************************

DESCRIPTION: Validates that a string is not all

  blank (whitespace) characters.

    

PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

*************************************************/

   var strTemp = strValue;

   strTemp = trimAll(strTemp);

   if(strTemp.length > 0){

     return true;

   }  

   return false;

}



function validateUSZip( strValue ) {

/************************************************

DESCRIPTION: Validates that a string a United

  States zip code in 5 digit format or zip+4

  format. 99999 or 99999-9999

    

PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.



*************************************************/

var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;

 

  //check for valid US Zipcode

  return objRegExp.test(strValue);

}



function validateUSDate( strValue ) {

/************************************************

DESCRIPTION: Validates that a string contains only 

    valid dates with 2 digit month, 2 digit day, 

    4 digit year. Date separator can be ., -, or /.

    Uses combination of regular expressions and 

    string parsing to validate date.

    Ex. mm/dd/yyyy or mm-dd-yyyy or mm.dd.yyyy

    

PARAMETERS:

   strValue - String to be tested for validity

   

RETURNS:

   True if valid, otherwise false.

   

REMARKS:

   Avoids some of the limitations of the Date.parse()

   method such as the date separator character.

*************************************************/

  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

 

  //check to see if in correct format

  if(!objRegExp.test(strValue))

    return false; //doesn't match pattern, bad date

  else{

    var arrayDate = strValue.split(RegExp.$1); //split date into month, day, year

	var intDay = parseInt(arrayDate[1],10); 

	var intYear = parseInt(arrayDate[2],10);

    var intMonth = parseInt(arrayDate[0],10);

	

	//check for valid month

	if(intMonth > 12 || intMonth < 1) {

		return false;

	}

	

    //create a lookup for months not equal to Feb.

    var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,

                        '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}

  

    //check if month value and day value agree

    if(arrayLookup[arrayDate[0]] != null) {

      if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0)

        return true; //found in lookup table, good date

    }

		

    //check for February

	var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0));

    if( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0)

      return true; //Feb. had valid number of days

  }

  return false; //any other values, bad date

}



function validateValue( strValue, strMatchPattern ) {

/************************************************

DESCRIPTION: Validates that a string a matches

  a valid regular expression value.

    

PARAMETERS:

   strValue - String to be tested for validity

   strMatchPattern - String containing a valid

      regular expression match pattern.

      

RETURNS:

   True if valid, otherwise false.

*************************************************/

var objRegExp = new RegExp( strMatchPattern);

 

 //check if string matches pattern

 return objRegExp.test(strValue);

}





function rightTrim( strValue ) {

/************************************************

DESCRIPTION: Trims trailing whitespace chars.

    

PARAMETERS:

   strValue - String to be trimmed.  

      

RETURNS:

   Source string with right whitespaces removed.

*************************************************/

var objRegExp = /^([\w\W]*)(\b\s*)$/;

 

      if(objRegExp.test(strValue)) {

       //remove trailing a whitespace characters

       strValue = strValue.replace(objRegExp, '$1');

    }

  return strValue;

}



function leftTrim( strValue ) {

/************************************************

DESCRIPTION: Trims leading whitespace chars.

    

PARAMETERS:

   strValue - String to be trimmed

   

RETURNS:

   Source string with left whitespaces removed.

*************************************************/

var objRegExp = /^(\s*)(\b[\w\W]*)$/;

 

      if(objRegExp.test(strValue)) {

       //remove leading a whitespace characters

       strValue = strValue.replace(objRegExp, '$2');

    }

  return strValue;

}



function trimAll( strValue ) {

/************************************************

DESCRIPTION: Removes leading and trailing spaces.



PARAMETERS: Source string from which spaces will

  be removed;



RETURNS: Source string with whitespaces removed.

*************************************************/ 

 var objRegExp = /^(\s*)$/;



    //check for all spaces

    if(objRegExp.test(strValue)) {

       strValue = strValue.replace(objRegExp, '');

       if( strValue.length == 0)

          return strValue;

    }

    

   //check for leading & trailing spaces

   objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;

   if(objRegExp.test(strValue)) {

       //remove leading and trailing whitespace characters

       strValue = strValue.replace(objRegExp, '$2');

    }

  return strValue;

}



function removeCurrency( strValue ) {

/************************************************

DESCRIPTION: Removes currency formatting from 

  source string.

  

PARAMETERS: 

  strValue - Source string from which currency formatting

     will be removed;



RETURNS: Source string with commas removed.

*************************************************/

  var objRegExp = /\(/;

  var strMinus = '';

 

  //check if negative

  if(objRegExp.test(strValue)){

    strMinus = '-';

  }

  

  objRegExp = /\)|\(|[,]/g;

  strValue = strValue.replace(objRegExp,'');

  if(strValue.indexOf('$') >= 0){

    strValue = strValue.substring(1, strValue.length);

  }

  return strMinus + strValue;

}



function addCurrency( strValue ) {

/************************************************

DESCRIPTION: Formats a number as currency.



PARAMETERS: 

  strValue - Source string to be formatted



REMARKS: Assumes number passed is a valid 

  numeric value in the rounded to 2 decimal 

  places.  If not, returns original value.

*************************************************/

  var objRegExp = /-?[0-9]+\.[0-9]{2}$/;

   

    if( objRegExp.test(strValue)) {

      objRegExp.compile('^-');

      strValue = addCommas(strValue);

      if (objRegExp.test(strValue)){

        strValue = '($' + strValue.replace(objRegExp,'') + ')';

      }

      else {

        strValue = '$' + strValue;

      }

      return  strValue;

    }

    else

      return strValue;

}



function removeCommas( strValue ) {

/************************************************

DESCRIPTION: Removes commas from source string.



PARAMETERS: 

  strValue - Source string from which commas will 

    be removed;



RETURNS: Source string with commas removed.

*************************************************/

  var objRegExp = /,/g; //search for commas globally

 

  //replace all matches with empty strings

  return strValue.replace(objRegExp,'');

}



function addCommas( strValue ) {

/************************************************

DESCRIPTION: Inserts commas into numeric string.



PARAMETERS: 

  strValue - source string containing commas.

  

RETURNS: String modified with comma grouping if

  source was all numeric, otherwise source is 

  returned.

  

REMARKS: Used with integers or numbers with

  2 or less decimal places.

*************************************************/

  var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})'); 



    //check for match to search criteria

    while(objRegExp.test(strValue)) {

       //replace original string with first group match, 

       //a comma, then second group match

       strValue = strValue.replace(objRegExp, '$1,$2');

    }

  return strValue;

}



function removeCharacters( strValue, strMatchPattern ) {

/************************************************

DESCRIPTION: Removes characters from a source string

  based upon matches of the supplied pattern.



PARAMETERS: 

  strValue - source string containing number.

  

RETURNS: String modified with characters

  matching search pattern removed

  

USAGE:  strNoSpaces = removeCharacters( ' sfdf  dfd', 

                                '\s*')

*************************************************/

 var objRegExp =  new RegExp( strMatchPattern, 'gi' );

 

 //replace passed pattern matches with blanks

  return strValue.replace(objRegExp,'');

}



 


