Decimal Number Regex
Validates a fixed-point decimal number that requires digits on both sides of the decimal point, with an optional leading minus sign.
Regex Pattern
^-?\d+\.\d+$Pattern Breakdown
Hover over a token to see what it does.
| Token | Meaning |
|---|---|
| ^ | Anchors the match to the start of the string. |
| -? | An optional leading minus sign for negative values. |
| \d+ | One or more digits for the integer part, required before the decimal point. |
| \. | A literal decimal point. |
| \d+ | One or more digits for the fractional part, required after the decimal point. |
| $ | Anchors the match to the end of the string. |
Detailed Explanation
What it does
This pattern matches a fixed-point decimal number such as 3.14 or -0.5, requiring at least one digit before and after a single decimal point. Plain integers without a decimal point, and shorthand forms like .5 or 3., are intentionally rejected since this pattern targets strictly two-sided decimal notation.
Why it works
Both `\d+` groups are mandatory, so the decimal point must have real digits on either side, and the literal `\.` (escaped so it isn't treated as 'any character') sits exactly once between them. Anchoring with `^` and `$` prevents a value like 3.14.15 from partially matching just the 3.14 portion.
Common use cases
- Validating price, weight, or measurement fields that must show explicit decimal precision
- Enforcing a strict two-sided decimal format distinct from shorthand notations like .5
- Pre-checking numeric CSV columns that are expected to always include a fractional part
- Filtering configuration values that must be expressed as fixed-point decimals
Edge cases
- 3. and .5 both fail because this pattern requires digits on both sides of the point, unlike the more permissive float-number pattern
- 3.14.15 fails because the anchors force the entire string to match, not just a leading substring
- -0.0 matches even though it represents zero, since the pattern only checks shape, not numeric value
- Trailing zeros like 3.140 match without issue since any number of fractional digits is allowed
Limitations
- Does not accept scientific notation such as 1.5e10; use a dedicated scientific-notation pattern for that
- Does not accept plain integers or values missing one side of the decimal point
- Does not support thousands separators like commas within the integer part
Interactive Tester
Edit the pattern or text below — matching runs live in your browser.
Test Cases
Editable — add your own inputs to see if they pass.
| Input | Expected | Result | |
|---|---|---|---|
| Pass | |||
| Pass | |||
| Pass | |||
| Pass | |||
| Pass | |||
| Pass | |||
| Pass | |||
| Pass |
Language Variants
Production-ready examples in 12 languages.
const decimalPattern = /^-?\d+\.\d+$/;
function isDecimalNumber(value) {
return decimalPattern.test(value);
}
console.log(isDecimalNumber("3.14")); // trueCommon Mistakes
Using an unescaped `.` for the decimal point, which matches any character instead of a literal dot.
Fix: Escape the decimal point as `\.` so only a literal dot is accepted.
Expecting this pattern to also match plain integers like 42.
Fix: Use the separate integer pattern for whole numbers, or make the fractional group optional if both should be accepted.
Expecting shorthand forms like .5 or 3. to match.
Fix: Use the float-number pattern instead, which allows an omitted digit on one side of the point.
Performance Notes
- Both `\d+` groups are non-overlapping and separated by a literal dot, so there is no catastrophic backtracking risk.
- Anchoring both ends lets malformed input like extra trailing characters fail immediately.
- For bulk validation, precompile the regex once and reuse the compiled object across calls.
Browser Compatibility
| Engine | Supported | Notes |
|---|---|---|
| Chrome | Yes | — |
| Firefox | Yes | — |
| Safari | Yes | — |
| Edge | Yes | — |
| Node.js | Yes | — |
Work with this pattern
Take this expression further — test it against your own data, adapt it in the builder, or read up on the syntax behind it.
Regex Tester
Test a regular expression against sample text and see every match highlighted live.
Regex Generator
Build a pattern by clicking blocks — no syntax memorisation required.
Regular Expressions Guide
What regex is, how the syntax works, and the mistakes that trip people up.
Regex Cheat Sheet
Every token, quantifier, and assertion on one printable page.
Python Regex Guide
The re module end to end — search, match, findall, groups, and substitution.
Regex Pattern Library
100+ ready-to-use patterns for email, URLs, dates, IPs, and more.