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)$
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

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

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.