简体   繁体   中英

adding negative statement to regex

I am trying to check if a phone number like this exists in using regex.

(001) 33992292

So, I used

if(preg_match("/[0-9\(\)]+/", $row)){
     //is phone number
  }

But, the problem with this is that, strings containing numbers get passed as well, like foo134@yahoo.com , so how can I evaluate a phone number and exclude @ character is strings all together?

UDPATED /^(\\(\\d+\\))*\\s?(\\d+\\s*)+$/

you missed start string ^ sign and end string $ sign, what else your regex is wrong because 5545()4535 will also pass match

您需要在正则表达式中使用锚点 ,正确的语法是:

if(preg_match('~^\(\d{3}\) *\d{8}$~', $row)) { ... }

Telephone numbers are notorious for people to get wrong - and by people I mean programmers.

For example, these are all "common" ways of writing a phone number:

(001) 33992292
001 33992292
00133992292
001 3399 2292
(001) 3399-2292

A saner approach it to just remove everything that isn't a number and check the length:

$phonenumber = "(001) 33992292";
$phonenumber = preg_replace("/[^0-9,.]/", "", $phonenumber );

if (strlen($phonenumber) == 11) {
    // do thing
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM