Reputation: 1994
I want to validate phone numbers like (123) 456-7890 or 1234567890 How should be the 'matches' condition be written in the following code?
form.validate({
rules: {
phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}
Upvotes: 28
Views: 302992
Reputation: 155
I tried the below solution and it work fine for me.
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
Tried below phone format:
Upvotes: 1
Reputation: 79
jQuery.validator.methods.matches = function( value, element, params ) {
var re = new RegExp(params);
// window.console.log(re);
// window.console.log(value);
// window.console.log(re.test( value ));
return this.optional( element ) || re.test( value );
}
rules: {
input_telf: {
required : true,
matches : "^(\\d|\\s)+$",
minlength : 10,
maxlength : 20
}
}
Upvotes: 3
Reputation: 14236
This one is work for me:-
/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/
Upvotes: 1
Reputation: 11990
I know this is an old post, but I thought I would share my solution to help others.
This function will work if you want to valid 10 digits phone number "US number"
function getValidNumber(value)
{
value = $.trim(value).replace(/\D/g, '');
if (value.substring(0, 1) == '1') {
value = value.substring(1);
}
if (value.length == 10) {
return value;
}
return false;
}
Here how to use this method
var num = getValidNumber('(123) 456-7890');
if(num !== false){
alert('The valid number is: ' + num);
} else {
alert('The number you passed is not a valid US phone number');
}
Upvotes: 1
Reputation: 19067
If you normalize your data first, then you can avoid all the very complex regular expressions required to validate phone numbers. From my experience, complicated regex patterns can have two unwanted side effects: (1) they can have unexpected behavior that would be a pain to debug later, and (2) they can be slower than simpler regex patterns, which may become noticeable when you are executing regex in a loop.
By keeping your regular expressions as simple as possible, you reduce these risks and your code will be easier for others to follow, partly because it will be more predictable. To use your phone number example, first we can normalize the value by stripping out all non-digits like this:
value = $.trim(value).replace(/\D/g, '');
Now your regex pattern for a US phone number (or any other locale) can be much simpler:
/^1?\d{10}$/
Not only is the regular expression much simpler, it is also easier to follow what's going on: a value optionally leading with number one (US country code) followed by ten digits. If you want to format the validated value to make it look pretty, then you can use this slightly longer regex pattern:
/^1?(\d{3})(\d{3})(\d{4})$/
This means an optional leading number one followed by three digits, another three digits, and ending with four digits. With each group of numbers memorized, you can output it any way you want. Here's a codepen using jQuery Validation to illustrate this for two locales (Singapore and US):
http://codepen.io/thdoan/pen/MaMqvZ
Upvotes: 5
Reputation: 8728
function validatePhone(txtPhone) {
var a = document.getElementById(txtPhone).value;
var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/;
if (filter.test(a)) {
return true;
}
else {
return false;
}
}
Demo http://jsfiddle.net/dishantd/JLJMW/496/
Upvotes: 22
Reputation: 98718
Your code:
rules: {
phoneNumber: {
matches: "[0-9]+", // <-- no such method called "matches"!
minlength:10,
maxlength:10
}
}
There is no such callback function, option, method, or rule called matches
anywhere within the jQuery Validate plugin. (EDIT: OP failed to mention that matches
is his custom method.)
However, within the additional-methods.js
file, there are several phone number validation methods you can use. The one called phoneUS
should satisfy your pattern. Since the rule already validates the length, minlength
and maxlength
are redundantly unnecessary. It's also much more comprehensive in that area codes and prefixes can not start with a 1
.
rules: {
phoneNumber: {
phoneUS: true
}
}
DEMO: http://jsfiddle.net/eWhkv/
If, for whatever reason, you just need the regex for use in another method, you can take it from here...
jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
phone_number = phone_number.replace(/\s+/g, "");
return this.optional(element) || phone_number.length > 9 &&
phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");
Upvotes: 29
Reputation:
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
Supports :
Upvotes: 17
Reputation: 1201
Your regex should be something like
[0-9\-\(\)\s]+
.
It matches numbers, dashes, parentheses and space.
If you need something more strict, matching just your example, try this:
([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})
Upvotes: 36