6

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 :)

phihag
289k75 gold badges475 silver badges489 bronze badges
asked Feb 8, 2012 at 0:39
1
  • YOU ARE ALL AMAZING! THANK YOU! Commented Feb 8, 2012 at 0:46

8 Answers 8

13

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]+$/.

answered Feb 8, 2012 at 0:42
Sign up to request clarification or add additional context in comments.

Comments

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

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

answered Feb 8, 2012 at 0:42

Comments

1

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.

answered Feb 8, 2012 at 0:44

Comments

0

You can use regex for that:

var str = '12345678900';
if (str.match(/^\d{11}$/)) {
 // Valid
}
answered Feb 8, 2012 at 0:43

Comments

0

Maybe something like:

if (x.length == 11 && +x == x)
answered Feb 8, 2012 at 0:43

Comments

0

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!");
}
answered Feb 8, 2012 at 0:44

1 Comment

haha, of course I come up with a semi-convoluted method, completely ignoring regexp... hint: unless you're afraid of regexp for some reason, it's probably best to do that.
0

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.

answered Feb 8, 2012 at 0:48

Comments

0

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)

answered Feb 8, 2012 at 1:15

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.