Problem Description
Simple and reusable, validation and formating functions using Regular Expressions.
Solution Description
The solution is a javascript file, where common and resuable validation methods used
are listed and ready to use. The validation's and formating are done entirely
using Regular Expressions, to make the solution simple and robust.
Code Snippet
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,'');
}