Javascript正则表达式,仅匹配JavaScript样式的数字

时间:2017-11-09 07:30:10

标签: javascript regex

我正在尝试创建一个只匹配有效Javascript样式数字的javascript正则表达式。更多要求包括支持数字前面的可选减号或加号,小数点和指数符号(如1e-4或1E4),再次使用指数前面的可选符号。

表达式可以接受前面或后面的数字,但数字不能只是一个点。例如.2和2.是有效的,但不仅仅是点。

理想情况下,表达式包含在/^...$/中;格式。

我有一些项目,但我的表达式应该能够传递有效的javascript值,例如.5,-.5或+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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用

/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)(?:[eE][-+]?[0-9]+)?$/

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • [-+]? - 可选的+-符号
  • (?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?) - 两个序列中的任何一个:
    • \.[0-9]+ - 一个点和一个以上的数字
    • | - 或
    • [0-9]+(?:\.[0-9]*)? - 1位数字,然后是.的可选序列,后跟0+位数
  • (?:[eE][-+]?[0-9]+)? - 可选的指数部分:
    • [eE] - eE
    • [-+]? - 可选的加号或减号
    • [0-9]+ - 一位或多位
  • $ - 字符串结束。

&#13;
&#13;
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"));  
&#13;
&#13;
&#13;

答案 1 :(得分:0)

请查看下面的正则表达式吗?

var pattern = new RegExp(“(^([ - | +]?)([0-9] {0,12}?)(\。)([0-9]){0,12} $ )|(^([ - | +])([0-9]){0,12} $)“);