Fundamentals 15 min read

Mastering Common Regex Patterns for Data Validation

This article provides a comprehensive collection of regular expression patterns for validating numbers, characters, emails, URLs, IP addresses, dates, and other common input formats, offering developers ready-to-use solutions for robust data validation in applications.

Efficient Ops
Efficient Ops
Efficient Ops
Mastering Common Regex Patterns for Data Validation

1. Number Validation Expressions

Digits:

^[0-9]*$

Exactly n digits:

^\d{n}$

At least n digits:

^\d{n,}$

m‑n digits:

^\d{m,n}$

Zero or non‑zero leading numbers:

^(0|[1-9][0-9]*)$

Non‑zero start with up to two decimal places:

^([1-9][0-9]*)+(\.[0-9]{1,2})?$

Positive/negative numbers with 1‑2 decimal places:

^(\-)?\d+(\.\d{1,2})?$

Signed numbers with optional decimals:

^(\-|\+)?\d+(\.\d+)?$

Positive real numbers with two decimals:

^[0-9]+(\.[0-9]{2})?$

Positive real numbers with 1‑3 decimals:

^[0-9]+(\.[0-9]{1,3})?$

Non‑zero positive integer:

^[1-9]\d*$

or

^([1-9][0-9]*){1,3}$

or

^\+?[1-9][0-9]*$

Non‑zero negative integer:

^\-[1-9]\d*$

Non‑negative integer:

^\d+$

or

^[1-9]\d*|0$

Non‑positive integer:

^-?[1-9]\d*|0$

or

^((\-\d+)|(0+))$

Non‑negative floating number:

^\d+(\.\d+)?$

or complex form

^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

Non‑positive floating number:

^((\-\d+(\.\d+)?)|(0+(\.0+)?))$

or

^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

Positive floating number:

^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$

or

^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

Negative floating number:

^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$

or

^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

General floating number:

^(-?\d+)(\.\d+)?$

or

^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

2. Character Validation Expressions

Chinese characters:

^[\u4e00-\u9fa5]{0,}$

Alphanumeric:

^[A-Za-z0-9]+$

or

^[A-Za-z0-9]{4,40}$

Any characters length 3‑20:

^.{3,20}$

Only letters:

^[A-Za-z]+$

Only uppercase letters:

^[A-Z]+$

Only lowercase letters:

^[a-z]+$

Alphanumeric only:

^[A-Za-z0-9]+$

Alphanumeric with underscore:

^\w+$

or

^\w{3,20}

Chinese, English, digits, underscore:

^[\u4E00-\u9FA5A-Za-z0-9_]+$

Chinese, English, digits (no underscore):

^[\u4E00-\u9FA5A-Za-z0-9]+$

or

^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

Exclude specific symbols:

[^%&',;=?$\x22]+

Exclude tilde:

[^~\x22]+

3. Special Requirement Expressions

Email address:

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

Domain name:

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

Internet URL:

[a-zA-z]+://[^\s]*

or

^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

Mobile phone number (China):

^(13[0-9]|14[5|7]|15[0-9]|18[0-9])\d{8}$

Telephone number formats:

^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

Domestic telephone (e.g., 0511-4405222):

\d{3}-\d{8}|\d{4}-\d{7}

Identity card number (15 or 18 digits):

^\d{15}|\d{18}$

Short ID (digits, optional trailing x):

^([0-9]){7,18}(x|X)?$

or

^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

Account name (starts with letter, 5‑16 chars, letters/digits/underscore):

^[a-zA-Z][a-zA-Z0-9_]{4,15}$

Password (starts with letter, 6‑18 chars, letters/digits/underscore):

^[a-zA-Z]\w{5,17}$

Strong password (8‑10 chars, includes upper, lower, digit, no special chars):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

Date format (yyyy‑mm‑dd):

^\d{4}-\d{1,2}-\d{1,2}

Month (01‑12):

^(0?[1-9]|1[0-2])$

Day of month (01‑31):

^((0?[1-9])|((1|2)[0-9])|30|31)$

Money formats (allow commas and up to two decimals):

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$

or

^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$

XML file name:

^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[xX][mM][lL]$

Chinese character regex:

[\u4e00-\u9fa5]

Double‑byte character:

^\x00-\xff

Blank line removal:

\n\s*\r

HTML tag regex (simplified):

<(\S?)[^>]>.*?</\1>|<.*? />

Trim leading/trailing whitespace:

^\s|\s$

QQ number (starts from 10000):

[1-9][0-9]{4,}

Chinese postal code (6 digits):

[1-9]\d{5}(?!\d)

IPv4 address:

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

IPv6 address:

(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

Subnet mask:

((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

Full date validation (yyyy‑mm‑dd, leap year aware):

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
Validationregexinput validationdata validationregular expression
Efficient Ops
Written by

Efficient Ops

This public account is maintained by Xiaotianguo and friends, regularly publishing widely-read original technical articles. We focus on operations transformation and accompany you throughout your operations career, growing together happily.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.