Reputation: 245
I am trying to create a javascript regular expression that matches only valid Javascript-style numbers. More requirements include support for an optional minus or plus sign in front of the number, the decimal dot and exponent notations such as 1e-4 or 1E4, and again with an optional sign in front of the exponent.
The expression can accept digits in front or after the dot, but the number cannot be just a dot. Such as .2 and 2. are valid, but not just the dot.
Ideally the expression is contained in /^...$/; format.
I got a few of the items, but my expression should be able to pass valid javascript values such as .5, -.5 or +5
function validNumber(number) {
var regexNum = /^-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?$/;
return regexNum.test(number);
}
console.log(validNumber("0.0001")); // true
console.log(validNumber("-5")); // true
console.log(validNumber("0.3425")); // true
console.log(validNumber("1e-4")); // true
console.log(validNumber("1E-4")); // true
console.log(validNumber("1Ee-4")); // false
console.log(validNumber("-4.34")); // true
console.log(validNumber("Test123")); // false
console.log(validNumber("+-2")); // false
console.log(validNumber("5.")); // true
console.log(validNumber(".")); // false
console.log(validNumber(".5")); // Should be true, but passes as false
console.log(validNumber("-.5")); // Should be true, but passes as false
console.log(validNumber("+5")); // Should be true, but passes as false
Any suggestions?
Upvotes: 2
Views: 143
Reputation: 626689
You may use
/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)(?:[eE][-+]?[0-9]+)?$/
See the regex demo
Details
^
- start of string[-+]?
- an optional +
or -
sign(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)
- either of the two sequences:
\.[0-9]+
- a dot and 1+ digits|
- or[0-9]+(?:\.[0-9]*)?
- 1+ digits, then an optional sequence of a .
followed with 0+ digits(?:[eE][-+]?[0-9]+)?
- an optional exponent part:
[eE]
- an e
or E
[-+]?
- an optional plus or minus[0-9]+
- 1 or more digits$
- end of string.var regexNum = /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)(?:[eE][-+]?[0-9]+)?$/;
function validNumber(number) {
return regexNum.test(number);
}
console.log("0.0001", validNumber("0.0001")); // true
console.log("-5", validNumber("-5")); // true
console.log("0.3425", validNumber("0.3425")); // true
console.log("1e-4", validNumber("1e-4")); // true
console.log("1E-4", validNumber("1E-4")); // true
console.log("1Ee-4", validNumber("1Ee-4")); // false
console.log("-4.34", validNumber("-4.34")); // true
console.log("Test123", validNumber("Test123")); // false
console.log("+-2", validNumber("+-2")); // false
console.log("5.", validNumber("5.")); // true
console.log(".", validNumber(".")); // false
console.log(".5", validNumber(".5")); // Should be true, but passes as false
console.log("-.5", validNumber("-.5")); // Should be true, but passes as false
console.log("+5", validNumber("+5"));
Upvotes: 2
Reputation: 1333
Can you please check below regex?
var pattern = new RegExp("(^([-|+]?)([0-9]{0,12}?)(\.)([0-9]){0,12}$)|(^([-|+]?)([0-9]){0,12}$)");
Upvotes: 0