TelephoneNumberTextBox Class - ASP.NET

This page is part of the Class Library Pages collection.
Click the icon to see the index.

Overview

The TelephoneNumberTextBox is a subclass of the standard ASP.NET TextBox control, coded to facilitate the entry of U.S. phone numbers.

Features


Source Code

VB.NET

{copytext|VbSource}
Imports Microsoft.VisualBasic
'===================================
'   Files required by this class    
'                                   
'   (1) Scripts/TelephoneNumberTextBox.js       
'-----------------------------------
Namespace AcmeBroomCompany

    Public Class TelephoneNumberTextBox
    Inherits TextBox

        Public Sub New()
            Me.Attributes.Add("onkeydown", "javascript:backspacerDOWN(this,event);")
            Me.Attributes.Add("onkeyup", "javascript:backspacerUP(this,event, 1);")
            Me.MaxLength = 12
        End Sub

    End Class

End Namespace

C#

{copytext|CsSource}
TODO


JavaScript

{copytext|JsSource}
/* This script is based on the javascript code of Roman Feldblum (web.developer@programmer.net) 
Original script : http://javascript.internet.com/forms/format-phone-number.html 
Original script is revised by Eralper Yilmaz (http://www.eralper.com) 
Revised script : http://www.kodyaz.com */

var zChar = new Array(' ', '(', ')', '-', '.');
var maxphonelength = 13;
var phonevalue1;
var phonevalue2;
var cursorposition;

function ParseForNumber1(object){
phonevalue1 = ParseChar(object.value, zChar);
}
function ParseForNumber2(object){
phonevalue2 = ParseChar(object.value, zChar);
}

function backspacerUP(object,e, bMTN) { 
if(e){ 
e = e 
} else {
e = window.event 
} 
if(e.which){ 
var keycode = e.which 
} else {
var keycode = e.keyCode 
}

ParseForNumber1(object)

if(keycode >= 48){
//ValidatePhone(object)

if (bMTN == 1)
    FormatPhone(object);
else
    FormatNPANXX(object);
    
}
}

function backspacerDOWN(object,e) { 
if(e){ 
e = e 
} else {
e = window.event 
} 
if(e.which){ 
var keycode = e.which 
} else {
var keycode = e.keyCode 
}
ParseForNumber2(object)
} 

function GetCursorPosition(){

var t1 = phonevalue1;
var t2 = phonevalue2;
var bool = false
for (i=0; i<t1.length; i++)
{
if (t1.substring(i,1) != t2.substring(i,1)) {
if(!bool) {
cursorposition=i
bool=true
}
}
}
}

function ValidatePhoneX(object){

var p = phonevalue1

p = p.replace(/[^\d]*/gi,"")

if (p.length < 3) {
object.value=p
} else if(p.length==3){
pp=p;
d4=p.indexOf('-')
//d5=p.indexOf(')')
if(d4==-1){
//pp="("+pp;
pp=pp+"-";
}
//if(d5==-1){
//pp=pp+")";
//}
object.value = pp;
} else if(p.length>3 && p.length < 7){
//p ="(" + p; 
l30=p.length;
p30=p.substring(0,3);
p30=p30+"-"

p31=p.substring(4,l30);
pp=p30+p31;

object.value = pp; 

} else if(p.length >= 7){
p ="(" + p; 
l30=p.length;
p30=p.substring(0,4);
p30=p30+")"

p31=p.substring(4,l30);
pp=p30+p31;

l40 = pp.length;
p40 = pp.substring(0,8);
p40 = p40 + "-"

p41 = pp.substring(8,l40);
ppp = p40 + p41;

object.value = ppp.substring(0, maxphonelength);
}

GetCursorPosition()

if(cursorposition >= 0){
if (cursorposition == 0) {
cursorposition = 2
} else if (cursorposition <= 2) {
cursorposition = cursorposition + 1
} else if (cursorposition <= 5) {
cursorposition = cursorposition + 2
} else if (cursorposition == 6) {
cursorposition = cursorposition + 2
} else if (cursorposition == 7) {
cursorposition = cursorposition + 4
e1=object.value.indexOf(')')
e2=object.value.indexOf('-')
if (e1>-1 && e2>-1){
if (e2-e1 == 4) {
cursorposition = cursorposition - 1
}
}
} else if (cursorposition < 11) {
cursorposition = cursorposition + 3
} else if (cursorposition == 11) {
cursorposition = cursorposition + 1
} else if (cursorposition >= 12) {
cursorposition = cursorposition
}

var txtRange = object.createTextRange();
txtRange.moveStart( "character", cursorposition);
txtRange.moveEnd( "character", cursorposition - object.value.length);
txtRange.select();
}

}

function ParseChar(sStr, sChar)
{
if (sChar.length == null) 
{
zChar = new Array(sChar);
}
else zChar = sChar;

for (i=0; i<zChar.length; i++)
{
sNewStr = "";

var iStart = 0;
var iEnd = sStr.indexOf(sChar[i]);

while (iEnd != -1)
{
sNewStr += sStr.substring(iStart, iEnd);
iStart = iEnd + 1;
iEnd = sStr.indexOf(sChar[i], iStart);
}
sNewStr += sStr.substring(sStr.lastIndexOf(sChar[i]) + 1, sStr.length);

sStr = sNewStr;
}

return sNewStr;
}


function FormatPhone(PhoneField)
{
 var phone;
 var phoneLen;
 var d4;
  
 phone=PhoneField.value
 phone=phone.replace("(","")
 phone=phone.replace("(","")
 phone=phone.replace("(","")
 phone=phone.replace(")","")
 phone=phone.replace(")","")
 phone=phone.replace(")","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("/","")
 phone=phone.replace("/","")
 phone=phone.replace("/","")
 phoneLen=phone.length
 
 if(phoneLen==3)
 {
  phone=phone+"-";
 }
 else
 {
  if(phoneLen>3)
  {
   phone=phone.substring(0,3) + "-" + phone.substring(3, phone.length);
  }
 }
 if(phoneLen==6)
 {
  phone=phone+"-";
 }
 else
 {
  if(phoneLen>6)
  {
   phone=phone.substring(0,7) + "-" + phone.substring(7, phone.length);
  }
 }
 
 PhoneField.value="";
 PhoneField.value=phone;
}



function FormatNPANXX(NPANXXField)
{
 var phone;
 var phoneLen;
 var d4;
  
 phone=NPANXXField.value
 phone=phone.replace("(","")
 phone=phone.replace("(","")
 phone=phone.replace("(","")
 phone=phone.replace(")","")
 phone=phone.replace(")","")
 phone=phone.replace(")","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phone=phone.replace("-","")
 phoneLen=phone.length
 
 if(phoneLen==3)
 {
  phone=phone+"-";
 }
 else
 {
  if(phoneLen>3)
  {
   phone=phone.substring(0,3) + "-" + phone.substring(3, phone.length);
  }
 }
 if(phoneLen==6)
 {
  //phone=phone+"-";
 }
 else
 {
  if(phoneLen>6)
  {
   //phone=phone.substring(0,7) + "-" + phone.substring(7, phone.length);
  }
 }
 
 NPANXXField.value="";
 NPANXXField.value=phone;
}
 
 
function ValidatePhone (objPhone) {
    var strPhone = objPhone.value;
    
    if (strPhone == '')
        return true;
        
    var vNPANumber, vNXXNumber, vRangeNumber

    if ((strPhone.charAt(3) != '-') || (strPhone.charAt(7) != '-') || (strPhone.length != 12))
    {
        alert("Phone number should be entered in 999-999-9999 format.");
        objPhone.focus();
        return false;
    }
    
    //alert(strPhone);
    vNPANumber = strPhone.substring(0, 3)
    vNXXNumber = strPhone.substring(4, 7)
    vRangeNumber = strPhone.substring(8, 12)

    //alert(vNPANumber.length);
    //alert(vNPANumber);
    //alert(vNXXNumber.length);
    //alert(vNXXNumber);
    //alert(vRangeNumber.length);
    //alert(vRangeNumber);
    if ((vNPANumber.length != 3) || (vNXXNumber.length != 3) || (vRangeNumber.length != 4))
    {
        alert("Phone number should be entered in 999-999-9999 format.");
        objPhone.focus();
        return false;
    }
    
    if ( (isNaN(vNPANumber)) || (isNaN(vNXXNumber)) || (isNaN(vRangeNumber)) )
    {
        alert("Phone number should be entered in 999-999-9999 format.");
        objPhone.focus();
        return false;
    }

    return true;
}