开发者

Regular expression to match US phone numbers

The regular expression ^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$ ma开发者_开发百科tches strings of the form XXX-XXX-XXXX and XXX-XXXX (am I missing out something?).

It doesn't, however, match (XXX) XXX-XXXX and (XXX) XXX-XXX-XXXX as well (which I need it to match).

Can you help me fix it so that it matches the formats

     XXX-XXX-XXXX, XXX-XXXX, (XXX) XXX-XXXX, (XXX) XXX-XXXX

without causing it to match other string formats which I don't want?


Your specification is a bit confusing. Your last two cases appear the same:
XXX-XXX-XXXX
XXX-XXXX
(XXX) XXX-XXXX
(XXX) XXX-XXXX

(It looks like you're trying to match a phone number, is that right?) Assuming your last case is "(XXX)XXX-XXXX" (no space between area code and regular number, which I assume is the " ?" meaning optional space) then your RegExp is almost correct, just add two backslashes in front of the area code parentheses so they're matched as plain characters and not special grouping characters:

^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$

Note that your regular expression may not have come through correctly, I noticed that stack overflow removed a single backslash from the RE pattern, I had to type a double backslash "\\" in order to get a single backslash to come out in the message


Try this:

(\(\d{3}\) )?(\d{3}-){1,2}(\d{4})


You need to escape the parenthesis, like this: \( otherwise, they do not get matched and do captures instead.


^(((\d{3}) ?)|(\d{3}-))?\d{3}-\d{4}$^

this will work.


I think so this is what you are looking for,

/^((((([0-9]{3})-)|((([0-9]{3}))\s))([0-9]{3})-([0-9]{4}))|(([0-9]{3})-([0-9]{4})))$/

It will work for below patterns XXX-XXX-XXXX, XXX-XXXX, (XXX) XXX-XXXX

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜