简体   繁体   中英

Regex & Phone Numbers

So I have been working on creating a regex to validate phone numbers in the following format XXX-XXX-XXXX which has been working pretty well so far, but now I'm trying to figure out how to remove the ability to enter specific numbers like "123-456-7890".

My current regex is

(^[0-9]{3}-[0-9]{3}-[0-9]{4}$)

I've been looking into it for a few days, but I can't seem to figure out what to add to my current expression in order to get "any number with formats XXX-XXX-XXXX BUT NOT 123-456-7890"

Can anyone help me with this?

Thank you so much

If negative look-ahead is supported in whatever version you're running, this should work:

(^(?!123-456-7890)[0-9]{3}-[0-9]{3}-[0-9]{4}$)

It's the same expression you used, just with a negative look-ahead added in the beginning.
(?!123-456-7890) checks if the character sequence ahead doesn't match the pattern '123-456-7890'.
Only if this condition is met, the rest of the pattern will be considered.

The same can be done by checking after matching the pattern using the look-behind expression (?<!123-456-7890)

(^[0-9]{3}-[0-9]{3}-[0-9]{4}(?<!123-456-7890)$)

in case that's faster or more practical for you.

https://regex101.com/r/GOyOgf/1

I would break them into 2 regexes for simplicity and you can use an alternation for the not matches, like this:

        var regexToMatch = new Regex("(^[0-9]{3}-[0-9]{3}-[0-9]{4}$)");
        var regexToNotMatch = new Regex("(123-456-7890)|(098-765-4321)");
        
        var testString = "123-456-7890";
        
        if(regexToMatch.IsMatch(testString) && !regexToNotMatch.IsMatch(testString))
        {
            Console.WriteLine("Valid!");    
        }
        else
        {
            Console.WriteLine("Not Valid!");
        }

And here's a working fiddle of it.

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