Frontend Development 17 min read

Mastering Regex: Essential Patterns for Validating Numbers, Text, and URLs

This guide compiles a comprehensive collection of regular expressions for validating numeric formats, character sets, special inputs like emails and URLs, as well as IP addresses, dates, and other common data patterns, providing clear examples and explanations for developers.

Efficient Ops
Efficient Ops
Efficient Ops
Mastering Regex: Essential Patterns for Validating Numbers, Text, and URLs

1. Number Validation Expressions

Number:

^[0-9]*$

n-digit number:

^\d{n}$

At least n digits:

^\d{n,}$

m‑n digits:

^\d{m,n}$

Zero or non‑zero leading number:

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

Non‑zero leading number with up to two decimal places:

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

Positive or negative number with 1‑2 decimal places:

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

Signed number with optional decimal:

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

Positive integer with exactly two decimal places:

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

Positive integer with 1‑3 decimal places:

^[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][]0-9"*$

or

^-\[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

^[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 (letters and digits):

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

or

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

Any characters, length 3‑20:

^.{3,20}$

Only letters (A‑Z, a‑z):

^[A-Za-z]+$

Only uppercase letters:

^[A-Z]+$

Only lowercase letters:

^[a-z]+$

Alphanumeric string:

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

Alphanumeric with underscore:

^\w+$

or

^\w{3,20}$

Chinese, letters, digits, underscore:

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

Chinese and letters/digits without underscore:

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

or

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

Disallow specific symbols (% & ', ; = ? $ "):

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

Disallow 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|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

Phone number (various formats):

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

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

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

ID card number (15 or 18 digits):

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

Short ID (digits ending with optional x/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 Input Formats

Acceptable forms include "10000.00", "10,000.00", "10000", and "10,000".

Basic non‑zero number:

^[1-9][0-9]*$

Zero or non‑zero number:

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

Allow optional leading minus (though money is usually non‑negative):

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

Number with optional decimal part (at least one digit after dot):

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

Two‑decimal‑place requirement:

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

One or two decimal places:

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

Allow commas as thousand separators:

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

General form with optional commas:

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

Other Useful Regex

XML file name:

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

Chinese character range:

[\u4e00-\u9fa5]

Double‑byte characters:

^\x00-\xff

Blank line removal:

\n\s*\r

HTML tag matching (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)

IP address (basic):

\d+\.\d+\.\d+\.\d+

IP‑v4 (validated range):

\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

IP‑v6:

<code>(([0-9a-fA-F]{1,4}:){7,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]))</code>

Subnet mask:

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

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

<code>^(?:(?!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))$</code>

HTML comment extraction:

&lt;!--(.*?)--&gt;

CSS property extraction:

^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}

Page hyperlink extraction (example pattern):

(&lt;a\s*(?!.*\brel=)[^&gt;]*)(href="https?:\/\/)((?!(?:(?:www\.)?'.implode('|(?:www\.)?', $follow_list).'))[^" rel="external nofollow" ]+)")

Image source extraction:

\&lt; *[img][^\\&gt;]*[src] *= *[\"\']{0,1}([^\"\'\ &gt;]*)

Hex color code extraction:

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

File extension validation (e.g., .txt):

^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"&lt;&gt;|]+\.txt(l)?$

IE version detection (5‑8, excluding Trident 5‑9):

^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$
BackendFrontendJavaScriptValidationregexdata-formatinput-pattern
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.