Search code examples
c#regexregex-negation

Regex for Passport Number


I am trying to implement regex validation for passport number.

My requirement is

  1. Length should be minimum 3 characters to a maximum of 20 characters.
  2. Should not be only 0's

I tried with the below regular expression

^(?!0{3,20})[a-zA-Z0-9]{3,20}$

This seems to work for most of the cases, but incase my text contains 3 or more leading zeros, it seems to fail. Such as '00000001'.

Example Matches

  • 101AE24 - Working as expected
  • 00 - Not working as expected
  • 01234 - Working as expected
  • 00001 - Not working (But it should also be match)

Any help would be much appreciated.


Solution

  • What about this?

    ^(?!^0+$)[a-zA-Z0-9]{3,20}$
    

    Instead of saying 'reject values with 3-20 zeros', we can just say 'reject anything that only contains zeros (regardless of the length, since <3 and >20 fail anyway)