DEV Community

Dennis
Dennis

Posted on • Originally published at dennisschuster.net

25+ useful and commonly used Regular Expressions

Regular Expressions (Regex) are expressions that define a search pattern. Regex can be implemented in various tasks including searching, replacing, validation and text processing/parsing. It is mostly known in the combination with the programming language Perl, but Regex are also supported by most other languages.

If you every want to really dive deep into the world of Regular Expressions, I'd recommend the book "Mastering Regular Expressions " by Jeffrey E.F. Friedl.

Testing your regular expressions

There are times in which you can't test your Regex while programming. Or you might just want to play around and test your Regex.
In any case, there are a few Regex tester online, where you can add sample data and build or test your regex. Some of them are:

  • Regex101
  • RegExr
  • Regex Tester

Commonly used

Digits

Whole numbers:

/^\\d+$/
Enter fullscreen mode Exit fullscreen mode

Decimal numbers:

/^\\d*\\.\\d+$/
Enter fullscreen mode Exit fullscreen mode

Whole and decimal numbers:

/^\\d*(\\.\\d+)?$/
Enter fullscreen mode Exit fullscreen mode

Negative or positive whole and decimal numbers:

/^-?\\d*(\\.\\d+)?$/
Enter fullscreen mode Exit fullscreen mode

Alphanumeric

Without space

/^[a-zA-Z0-9]*$/
Enter fullscreen mode Exit fullscreen mode

With Space

/^[a-zA-Z0-9 ]*$/
Enter fullscreen mode Exit fullscreen mode

Username

Alphanumeric lowercase username that might contain

  • numbers
  • '-' or '_'

and a length of 3-16 characters

/^[a-z0-9_-]{3,16}$/
Enter fullscreen mode Exit fullscreen mode

Email

Common email

/^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})*$/
Enter fullscreen mode Exit fullscreen mode

Uncommon email

e.g. mail@sub.provider.com

/^([a-z0-9_\\.\\+-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$/
Enter fullscreen mode Exit fullscreen mode

RFC 5322

/(?(DEFINE)
    (?<addr_spec> (?&local_part) @ (?&domain) )
    (?<local_part> (?&dot_atom) | (?&quoted_string) | (?&obs_local_part) )
    (?<domain> (?&dot_atom) | (?&domain_literal) | (?&obs_domain) )
    (?<domain_literal> (?&CFWS)? \\[ (?: (?&FWS)? (?&dtext) )* (?&FWS)? \\] (?&CFWS)? )
    (?<dtext> [\\x21-\\x5a] | [\\x5e-\\x7e] | (?&obs_dtext) )
    (?<quoted_pair> \\\\ (?: (?&VCHAR) | (?&WSP) ) | (?&obs_qp) )
    (?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)? )
    (?<dot_atom_text> (?&atext) (?: \\. (?&atext) )* )
    (?<atext> [a-zA-Z0-9!#$%&'*+\\/=?^_`{|}~-]+ )
    (?<atom> (?&CFWS)? (?&atext) (?&CFWS)? )
    (?<word> (?&atom) | (?&quoted_string) )
    (?<quoted_string> (?&CFWS)? " (?: (?&FWS)? (?&qcontent) )* (?&FWS)? " (?&CFWS)? )
    (?<qcontent> (?&qtext) | (?&quoted_pair) )
    (?<qtext> \\x21 | [\\x23-\\x5b] | [\\x5d-\\x7e] | (?&obs_qtext) )
    # comments and whitespace
    (?<FWS> (?: (?&WSP)* \\r\\n )? (?&WSP)+ | (?&obs_FWS) )
    (?<CFWS> (?: (?&FWS)? (?&comment) )+ (?&FWS)? | (?&FWS) )
    (?<comment> \\( (?: (?&FWS)? (?&ccontent) )* (?&FWS)? \\) )
    (?<ccontent> (?&ctext) | (?&quoted_pair) | (?&comment) )
    (?<ctext> [\\x21-\\x27] | [\\x2a-\\x5b] | [\\x5d-\\x7e] | (?&obs_ctext) )
    # obsolete tokens
    (?<obs_domain> (?&atom) (?: \\. (?&atom) )* )
    (?<obs_local_part> (?&word) (?: \\. (?&word) )* )
    (?<obs_dtext> (?&obs_NO_WS_CTL) | (?&quoted_pair) )
    (?<obs_qp> \\\\ (?: \\x00 | (?&obs_NO_WS_CTL) | \\n | \\r ) )
    (?<obs_FWS> (?&WSP)+ (?: \\r\\n (?&WSP)+ )* )
    (?<obs_ctext> (?&obs_NO_WS_CTL) )
    (?<obs_qtext> (?&obs_NO_WS_CTL) )
    (?<obs_NO_WS_CTL> [\\x01-\\x08] | \\x0b | \\x0c | [\\x0e-\\x1f] | \\x7f )
    # character class definitions
    (?<VCHAR> [\\x21-\\x7E] )
    (?<WSP> [ \\t] )
)
^(?&addr_spec)$/xmg
Enter fullscreen mode Exit fullscreen mode

Passwords

Moderate Password

Password with at least

  • 1 lowercase letter
  • 1 uppercase letter
  • 1 number

and a minimum length of 8 characters.

Spaces allowed.

/(?=(.*[0-9]))((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.{8,}$/
Enter fullscreen mode Exit fullscreen mode

Spaces not allowed.

/^((?=\\S*?[A-Z])(?=\\S*?[a-z])(?=\\S*?[0-9]).{8,})\\S$/
Enter fullscreen mode Exit fullscreen mode

With optional special character and spaces not allowed

/^(?=.*\\d)(?=.*[a-zA-Z])[0-9a-zA-Z$&+,:;=?@#|'<>.-^*()%!]{8,}$/
Enter fullscreen mode Exit fullscreen mode

Strong Password

Passwords with at least

  • 1 lowercase letter
  • 1 uppercase letter
  • 1 number
  • 1 special character

and a minimum of 8 characters with spaces not allowed.

All special characters

/^(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[^\\w\\d\\s:])([^\\s]){8,}$/
Enter fullscreen mode Exit fullscreen mode

One of these special characters: !@#$%^&*()-=¡£+~.,<>/?;:'"|[]{}_

/^(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\¡\\£\\_\\+\\~\\.\\,\\<\\>\\/\\?\\;\\:\\'\\"\\\\\\|\\[\\]\\{\\}])([^\\s]){8,}$/
Enter fullscreen mode Exit fullscreen mode

Strong+ Password

Password with minimum

  • 1 lowercase letter
  • 1 uppercase letter
  • 1 number
  • 1 special character
  • 12 characters

and does not contain certain words.

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^\\w\\s\\d:])(?=(?:([\\w\\d])\\1?(?!\\1\\1)))(?!(?=.*([Jj]ohn|[Dd]oe]|blabla))).{12,}$
Enter fullscreen mode Exit fullscreen mode

IP addresses

IPv4

/^(?:(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)(?:\\.(?!$)|$)){4}$/
Enter fullscreen mode Exit fullscreen mode

Private IPv4

/^(10(\\.(1?\\d\\d?|2([0-4]\\d?|5[0-5])))(?2)|172\\.(1[6-9]|2\\d|3[0-2])(?2)|192\\.168(?2))(?2)$/
Enter fullscreen mode Exit fullscreen mode

IPv6

/(?:(?:(?:[A-F0-9]{1,4}:){6}|(?=(?:[A-F0-9]{0,4}:){0,6}(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?![:.\\w]))(([0-9A-F]{1,4}:){0,5}|:)((:[0-9A-F]{1,4}){1,5}:|:)|::(?:[A-F0-9]{1,4}:){5})(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}|(?=(?:[A-F0-9]{0,4}:){0,7}[A-F0-9]{0,4}(?![:.\\w]))(([0-9A-F]{1,4}:){1,7}|:)((:[0-9A-F]{1,4}){1,7}|:)|(?:[A-F0-9]{1,4}:){7}:|:(:[A-F0-9]{1,4}){7})(?![:.\\w])/i
Enter fullscreen mode Exit fullscreen mode

With Subnet

/(?:(?:(?:[A-F0-9]{1,4}:){6}|(?=(?:[A-F0-9]{0,4}:){0,6}(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?![:.\\w]))(([0-9A-F]{1,4}:){0,5}|:)((:[0-9A-F]{1,4}){1,5}:|:)|::(?:[A-F0-9]{1,4}:){5})(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}|(?=(?:[A-F0-9]{0,4}:){0,7}[A-F0-9]{0,4}(?![:.\\w]))(([0-9A-F]{1,4}:){1,7}|:)((:[0-9A-F]{1,4}){1,7}|:)|(?:[A-F0-9]{1,4}:){7}:|:(:[A-F0-9]{1,4}){7})(?![:.\\w])\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])/i
Enter fullscreen mode Exit fullscreen mode

IPv4 or IPv6

/((^\\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\\s*$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$))/
Enter fullscreen mode Exit fullscreen mode

Domains & URLs

General Domain (up to 3rd-level-domain)

/(?:(?:([\\w\\-]*)(?:\\.))?([\\w\\-]*))\\.(\\w*)/
Enter fullscreen mode Exit fullscreen mode

With optional port:

/(?:(?:([\\w\\-]*)(?:\\.))?([\\w\\-]*))\\.(\\w*)(?:\\:(\\d*))?/
Enter fullscreen mode Exit fullscreen mode

With protocol and optional port:

/(\\w*)\\:\\/\\/(?:(?:([\\w\\-]*)(?:\\.))?([\\w\\-]*))\\.(\\w*)(?:\\:(\\d*))?/
Enter fullscreen mode Exit fullscreen mode

With optional protocol and port:

/(?:(\\w*)\\:\\/\\/)?(?:(?:([\\w\\-]*)(?:\\.))?([\\w\\-]*))\\.(\\w*)(?:\\:(\\d*))?/
Enter fullscreen mode Exit fullscreen mode

URLs with path

Usually you'll want these to match specific protocols, therefore you can set them. In this case we'll be looking for http(s) and ftp(s). Otherwise you could also use the wildcard as in the general domain example.

/(https?|ftps?):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])/
Enter fullscreen mode Exit fullscreen mode

With optional protocol:

/(?:(https?|ftps?):\\/\\/)?([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])/
Enter fullscreen mode Exit fullscreen mode

File paths

File path with filename + extension

/((\\/|\\\\|\\/\\/|https?:\\\\\\\\|https?:\\/\\/)[a-z0-9 _@\\-^!#$%&+={}.\\/\\\\\\[\\]]+)+\\.[a-z]+$/
Enter fullscreen mode Exit fullscreen mode

File path with optional filename + extension

/^(.+)/([^/]+)$/
Enter fullscreen mode Exit fullscreen mode

Filename with extension

/^[\\w,\\s-]+\\.[A-Za-z]{3}$/
Enter fullscreen mode Exit fullscreen mode

Date

YYYY/MM/DD

/([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]))/
Enter fullscreen mode Exit fullscreen mode

DD/MM/YYYY, DD-MM-YYYY, DD.MM.YYYY

/^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/
Enter fullscreen mode Exit fullscreen mode

Time

HH:MM 12-hour

/^(0?[1-9]|1[0-2]):[0-5][0-9]$/
Enter fullscreen mode Exit fullscreen mode

With meridiems (am/pm)

/((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
Enter fullscreen mode Exit fullscreen mode

HH:MM 24-hour

/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
Enter fullscreen mode Exit fullscreen mode

With required leading '0'

/^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
Enter fullscreen mode Exit fullscreen mode

With Seconds

/(?:[01]\\d|2[0123]):(?:[012345]\\d):(?:[012345]\\d)/
Enter fullscreen mode Exit fullscreen mode

Other

username:password

/[0-9A-Za-z.]+:[0-z]+/
Enter fullscreen mode Exit fullscreen mode

Single .env file line

/(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\\"(?:\\\\\\"|[^\\"])*\\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/gm
Enter fullscreen mode Exit fullscreen mode

International phone number incl. european notation

/[+]\\d{1,2}|(00)\\d{2,4}|\\d{2})( [(]\\d{1,3}[)])?[-. \\/]?\\d{2,6}?[-. \\/]?\\d{2,15}([-. \\/]{1,3}\\d{1,5}){0,4}/
Enter fullscreen mode Exit fullscreen mode

Word duplicates

/(\\b\\w+\\b)(?=.*\\b\\1\\b)/ig
Enter fullscreen mode Exit fullscreen mode

Social Security Number

/^((?!219-09-9999|078-05-1120)(?!666|000|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4})|((?!219 09 9999|078 05 1120)(?!666|000|9\\d{2})\\d{3} (?!00)\\d{2} (?!0{4})\\d{4})|((?!219099999|078051120)(?!666|000|9\\d{2})\\d{3}(?!00)\\d{2}(?!0{4})\\d{4})$/
Enter fullscreen mode Exit fullscreen mode

Html tags with optional attributes

/<\\/?[\\w\\s]*>|<.+[\\W]>/
Enter fullscreen mode Exit fullscreen mode

Top comments (0)