Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex to allow only 9 or 10 characters?

9 characters requires 2 letters in the beginning i.e ab1234567 and 10 characters needs to have all digits i,e 1234567890. How do I do this using regex?

Here is what I have tried.

/^[a-zA-Z]{2}[\d]{7}|[\d]{10}$/

This doesnt seem to work. I would greatly appreciate your help.

like image 337
NepCoder Avatar asked Jan 02 '14 22:01

NepCoder


Video Answer


2 Answers

The | in your regex allows it to match either of these two possibilities:

^[a-zA-Z]{2}[\d]{7}

[\d]{10}$

That is, start of string then 2 letters and seven numbers followed by anything, or anything followed by 10 numbers and end of string. Try this:

/^([a-zA-Z]{2}\d{7}|\d{10})$/

(Note also that I've removed the [] from around each \d - there's no point having a character class with only one character in it.)

like image 101
nnnnnn Avatar answered Oct 21 '22 03:10

nnnnnn


The problem is that the ^ is only applying the first option, and the $ only applies to the second one.

Try this:

/^(?:[a-z]{2}\d{7}|\d{10})$/i
like image 27
Niet the Dark Absol Avatar answered Oct 21 '22 03:10

Niet the Dark Absol