创建一个只接受int和float值的“正则表达式”

时间:2014-03-27 13:26:40

标签: regex

正如标题所暗示的那样,我需要一个“正则表达式”,只接受整数值和/或浮点数以及更多这些条件

  • 该值必须介于10到40之间
  • 如果是浮点值,则只接受小数点后的一位数
  • 可接受值的示例:10/20 / 10.5 / 22.6 / 39.9 / 40
  • 不接受的值示例:10.55566 / 10.10.10 / 10 ..

我试试这个,但接受不符合上述条件的值(不幸的是,正则表达式不是很聪明)

var regex = /^(?=.*\d)\d*(?:\.\d*)?$/;

2 个答案:

答案 0 :(得分:4)

正则表达式将是:

\b(?:40(:?\.0)?|[1-3][0-9](?:\.[0-9])?)\b

其中:

  • \b匹配单词start / end
  • [1-3]将第一个数字限制在1-3
  • 范围内
  • [0-9]必须遵循必修数字,因此遵守规则10< = n< 40
  • (?:..)? ?使该群组无法?:无法捕获群组
  • \.匹配点字面
  • [0-9]正好一位数

您的检查方法应该类似

var check = function (str) {
    str = str.trim();
    var re = /\b[1-3][0-9](\.[0-9])?\b/;
    match = re.exec(str);
    return match !== null && match[0] === str;
}

替代:

/$\s*(:?40(:?\.0)?|[1-3][0-9](\.[0-9])?)\s*^/

如果您有一个包含相关数字的字符串

,请使用后者
  • \s*匹配任何空格字符
  • $表示字符串的开头
  • ^表示字符串的结尾

答案 1 :(得分:2)

匹配10< = number< = 40:

\b(?:40|[1-3]\d(?:\.\d)?)\b