To check if a string contains only numbers in JavaScript, call the test()
method on this regular expression: ^\d+$
. The test()
method will return true
if the string contains only numbers. Otherwise, it will return false
.
For example:
function containsOnlyNumbers(str) {
return /^\d+$/.test(str);
}
console.log(containsOnlyNumbers('HTML5')); // false
console.log(containsOnlyNumbers('1234')); // true
console.log(containsOnlyNumbers('3 bananas')); // false
The RegExp test() method searches for a match between a regular expression and a string.
The /
and /
characters are used to start and end a regular expression.
The ^
character marks the beginning of the string input, and the $
character marks the end of it.
The \d
pattern matches any digit (0
– 9
) in the string.
Adding the +
character after the \d
makes the regex match one or more occurrences of the \d
pattern.
So the regex matches a string that starts and ends with a consecutive sequence of digits.
We can use the [0-9]
pattern to match digits. This pattern matches any number character between 0
and 9
.
function containsOnlyNumbers(str) {
return /^[0-9]+$/.test(str);
}
console.log(containsOnlyNumbers('HTML5')); // false
console.log(containsOnlyNumbers('1234')); // true
console.log(containsOnlyNumbers('3 bananas')); // false
You might find [0-9]
to be more readable than \d
, especially if you’re not very familiar with special characters in regular expressions.
Match a string that contains numbers separated by a character
Sometimes we would like to match strings where the numbers might be separated by a particular character, such as a space or comma.
function containsOnlyNumbers(str) {
return /^(\d+,)*(\d+)$/.test(str);
}
console.log(containsOnlyNumbers('123456789')); // true (separator not required)
console.log(containsOnlyNumbers('123,456,789')); // true
console.log(containsOnlyNumbers('123-456-789')); // false
We do this using a regular expression of this format: ^(\d+{ch})*(\d+)$
, where {ch}
is the character separating the numbers.
So we can use a very similar regex to match a string that contains only numbers separated with hyphens:
function containsOnlyNumbers(str) {
return /^(\d+-)*(\d+)$/.test(str);
}
console.log(containsOnlyNumbers('123456789')); // true
console.log(containsOnlyNumbers('123,456,789')); // false
console.log(containsOnlyNumbers('123-456-789')); // true
Or spaces:
function containsOnlyNumbers(str) {
return /^(\d+ )*(\d+)$/.test(str);
}
console.log(containsOnlyNumbers('123456789')); // true
console.log(containsOnlyNumbers('123 456 789')); // true
console.log(containsOnlyNumbers('123-456-789')); // false
Tip: If you ever come across a regular expression with a pattern you find hard to understand, this regular expression cheat sheet from the MDN docs may help.
Like before, we could use [0-9]
in place of \d
for the regular expression:
function containsOnlyNumbers(str) {
return /^([0-9]+-)*([0-9]+)$/.test(str);
}
console.log(containsOnlyNumbers('123456789')); // true
console.log(containsOnlyNumbers('123,456,789')); // false
console.log(containsOnlyNumbers('123-456-789')); // true