Javascript 什么';这个正则表达式(if-else regex)有什么问题

Javascript 什么';这个正则表达式(if-else regex)有什么问题,javascript,regex,Javascript,Regex,我想要的是,有一个最大长度为5的文本框。允许的值为 任何整数//例如1、3、9、9239都是有效的 实数,小数点后精确一点//例如1.2,93.7有效,61.37,55.67无效 还允许只输入小数点和小数点后的数字,即.7为有效输入(将被视为0.7) 我找到了这个页面, 所以我想的是 有一个数字 如果后面有一个数字和一个小数,那么后面必须有一个数字 如果没有数字,则必须有一个小数点和其后的一个数字 所以,我做的正则表达式是 a single digit one or more => /d+

我想要的是,有一个最大长度为5的文本框。允许的值为

  • 任何整数//例如1、3、9、9239都是有效的
  • 实数,小数点后精确一点//例如1.2,93.7有效,61.37,55.67无效
  • 还允许只输入小数点和小数点后的数字,即.7为有效输入(将被视为0.7)
  • 我找到了这个页面,
    所以我想的是

  • 有一个数字
  • 如果后面有一个数字和一个小数,那么后面必须有一个数字
  • 如果没有数字,则必须有一个小数点和其后的一个数字
  • 所以,我做的正则表达式是

    a single digit one or more => /d+  
    an optional decimal point followed by exactly one digit => (?:[.]\d{1})?  
    if first condition matches => (?(first condition) => (?((?<=\d+)  
    then, match the option decimal and one exact digit =>(?((?<=\d+)(?:[.]\d{1})?  
    else => |
    find if there is a decimal and one exact digit => (?:[.]\d{1}){1}  
    check the whole condition globally => /gm
    
    单个数字一个或多个=>/d+
    一个可选的小数点,后跟正好一个数字=>(?:[.]\d{1})?
    如果第一个条件匹配=>(?(第一个条件)=>(?(?(?)|
    查找是否有一个十进制和一个精确数字=>(?:[.]\d{1}){1}
    全局检查整个条件=>/gm
    
    整体表达式=>

    (?(?<=\d+)(?:[.]\d{1}){1}|(?:[.]\d{1}){1})+/gm
    

    (?(?也许你把事情弄得太复杂了。我做了一个快速测试,除非我遗漏了什么,否则这个正则表达式似乎工作正常:

    /^\d*\.?\d$/
    
    演示:

    编辑:要检查无需正则表达式即可完成的长度:

    if ( value.replace('.','').length <= 5 && regex.test( value ) ) {
      ...
    }
    

    if(value.replace('..,'').length我不知道你想用正则表达式中的那些条件做什么。我还查看了你的JSFIDLE,它对我来说什么都不输出。但是我制作了两个版本的正则表达式,它们与文本框的正确值相匹配,分别是
    ^(?({6,}))(?:[1-9]\d*)*(?:\.\d*[1-9])$
    ^(?)?!(.{6,}))(?:\d*)*(?:\。\d*)?$

    第一个不允许以零开始,或在小数点后以零结束


    如果需要解释正则表达式,请进行注释。

    您可以尝试以下模式:

    /^\d{0,4}\.?\d$/
    
    它似乎满足了您的所有要求:

    > /^\d{0,4}\.?\d$/.test(".4")
      true
    > /^\d{0,4}\.?\d$/.test(".45")
      false
    > /^\d{0,4}\.?\d$/.test("1234.4")
      true
    > /^\d{0,4}\.?\d$/.test("12345.4")
      false
    > /^\d{0,4}\.?\d$/.test("12345")
      true
    > /^\d{0,4}\.?\d$/.test("123456")
      false
    
    此模式假定数字最多可以有五位数字和一个可选的小数点

    如果五的最大长度包括可选小数点,则模式稍微复杂一些:

    /^(?:\d{1,5}|\d{0,3}\.\d)$/
    
    组的第一部分处理所需长度的整数,组的第二个选项处理最大长度(包括小数点)为5的实数。

    考虑以下代码:

    var checkedString = "45.3 fsd fsd fsdfsd 673.24 fsd63.2ds 32.2 ds  32 ds 44 fasd 432 235f d653 dsdfs";
    checkedString = " "+checkedString;
    var results = checkedString.match(/[\s]{1}(\d+\.*\d{1})(?![\d\.\w])+/gm);
    results.map(function(result) {
        return result.trim();
    });
    

    因为在JS
    (?在您的示例中,
    .7
    返回
    false
    ,根据他想要的,它应该是
    true
    。嗯,
    .7
    返回true,如果允许尾随零,那么它将像
    /^\d*\\一样简单。?\d0*$/
    您在示例中忘记了一个
    /
    ,这就是它不起作用的原因。请注意,JavaScript reg前任不支持lookback。@Bergi:终于!它不起作用的原因是什么
    ["45.3","32.2","32","44","432"]