Rabiani
Rabiani

Reputation: 143

Validate 11 Digits in JavaScript

Might be a simple question, but I can't find an answer that fits this bit of code :(

I need to validate a phone number to have EXACTLY 11 digits (no letters)

    function validateForm3() {
  var x=document.forms["booking"]["number"].value;
if (x==null || x=="")
  {
  alert("Please fill in 11 numbers");
  return false;
  }
   var x=document.forms["booking"]["email"].value;
if (x.indexOf("@")=== -1)
  {
  alert("Please enter a valid email");
  return false;
  }
}

I can't really change the structure of this, so it needs to fit into this bit of code :( any suggestions or answers is greatly appeciated :)

Upvotes: 6

Views: 14788

Answers (8)

Blockpusher
Blockpusher

Reputation: 306

Steven Levithan has a very useful excerpt on Regexps that validate North American as well as international phone numbers at http://blog.stevenlevithan.com/archives/validate-phone-number .

That page is excerpted from his book Regular Expressions Cookbook (O'Reilly, 2009)

Upvotes: 0

cdm9002
cdm9002

Reputation: 1960

You can the use regular expression:

\d{11}

However, you probably also want to strip whitespace:

var isElevenNumbers = (/^\d{11}$/m.test(mynumber.replace(/\s]/g, '')));

And you may want to strip more for internation numbers, e.g. +1-234-567-9090

var isElevenNumbers = (/^\d{11}$/m.test(mynumber.replace(/[\s\+\-]/g, '')));

where 'mynumber' is your variable holding the value.

Upvotes: 0

JKing
JKing

Reputation: 847

kinda hacky, but you could do:

if(x.length==11)
{
    for (var i=0; i<x.length; i++)
    {
        if (parseInt(x[i])!=x[i])
        {
            alert("only enter numbers!");
        }
    }
}
else
{
    alert("must enter 11 digits!");
}

Upvotes: 0

knub
knub

Reputation: 4032

Use regex:

"1234".match(/^\d{4}$/);

Explanation:

^   - matches the beginning of the string
\d  - matches one digit
{4} - tells that we want four digits (you want thirteen then)
$   - matches the end of the string

See https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions for further reading.

Upvotes: 1

James M
James M

Reputation: 16718

Maybe something like:

if (x.length == 11 && +x == x)

Upvotes: 0

Petah
Petah

Reputation: 46050

You can use regex for that:

var str = '12345678900';
if (str.match(/^\d{11}$/)) {
    // Valid
}

Upvotes: 0

phihag
phihag

Reputation: 287775

Use regexp.test:

if (! /^[0-9]{11}$/.test(x)) {
  alert("Please input exactly 11 numbers!");
  return false;
}

Note that you're intentionally excluding a lot of phone numbers, including international ones or alternative writing styles of phone numbers you could reach. You should really just test for /^\+?[0-9]+$/.

Upvotes: 13

Cheery
Cheery

Reputation: 16214

if (!/^\d{11}$/.test(x)) 
    alert('These are not 11 digits!');
else 
    alert('Passed!');

Try it http://jsfiddle.net/LKAPN/1/

Upvotes: 2

Related Questions