简体   繁体   中英

Regex with numbers and special characters but no letters

I'm making a regex that accepts an input with any decimal(0-9), +, * or # but shouldn't accept any letters(az).

so numbers like

  • #192#
  • *31#+32475728966
  • 0479266315
  • +32495959511

should be accepted.

The regex is invalid when there is any letter in the string.

  • #192#abbef
  • a0479266315

This is the regex I have so far:

private const string PhoneNumberRegex = "((\\d)|(\\*)|(\\#)|(\\+))?";

private bool IsValid(inputString)
{
    // Accept * # + and number
    Match match = Regex.Match(inputString, PhoneNumberRegex, RegexOptions.IgnoreCase);
    return match.Success;
}

But this regex also returns true on #192#abbef

How can I fix this?

You can use this:

private const string PhoneNumberRegex = @"^[0-9*#+]+$";

Where ^ and $ are anchors for start and end of the string.

Note: RegexOptions.IgnoreCase is not needed.

You need to anchor your string with ^ (begin of line) and $ (end of line). Otherwise your string matches if any part of it matches.

Also, you want at least one of those characters (you don't want to match an empty string, so you should use + (one or more).

Lastly, you can make a character class out of all your characters: [\\d*#+] .

Putting it all together gives you:

private const string PhoneNumberRegex = "^[\\d*#+]+$";

This means that from the beginning of the string till the end, you want one or more of those characters you listed.

我相信这将满足您的需求

private const string PhoneNumberRegex = @"^([0-9]|#|\+|\*)+$"

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