【问题标题】:Regular Expression in Javascript for number with decimalJavascript中带小数的正则表达式
【发布时间】:2012-08-01 09:20:14
【问题描述】:

我想要一个文本框的正则表达式,它只允许 3 位数字并通过以下条件:

  1. 只有数字(234 或 123)或
  2. 最后只有一位小数 (55.1)
  3. 不应有空格
  4. 如果使用小数点,那么小数点之后/之前也应该有一个数字(不允许使用 555. 或 12. 或 .12)

我有以下部分工作的 RE:

/^\d{0,3}$|^\d{0,2}[\.]\d{1}$/

对修改有帮助吗?

看起来问题是额外的:

我在按键时使用代码。所以它会在按键时验证每个按下的值。

  if (window.event)    {
        knum = e.keyCode;
    }
    else if (e.which)    {
        knum = e.which;
    }
    kchar = String.fromCharCode(knum);
    numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;

    alert(numcheck.test(kchar));

任何十进制按键都返回 false。即使我输入 55,然后尝试中间的小数使其变为 5.5,ite 也会返回 false。

【问题讨论】:

  • 只需将您的 {0,2} 更改为 {1,2},但我觉得其他一切都很好。什么不起作用?
  • 为了清楚起见:您正在检查一个字符串,根据定义,长度为 1 个字符:String.fromCharCode(knum),为什么要匹配最多允许 4 个字符的模式?
  • 这样他们就不会在复选框中输入不需要的字符。因此,当我只有数字( /\d/ )时,代码运行良好。我将其更改为包含小数,并意识到它不起作用。这是修改了我的问题并提供了代码。
  • 您需要将 kchar 与 /[0-9.]/ 进行匹配。在他们使用以下正则表达式之一完成输入后,您必须检查整体有效性。否则,他们会输入类似 55 的内容。您会在他们到达最后一位之前阻止他们。

标签: javascript regex


【解决方案1】:

您至少需要 1 个数字,但最多需要 3 个:\d{1,3}

小数点前至少有 1 位,但不能超过 2 位,小数点后有 1 位:\d{1,2}[.]\d

所以这些结合起来:/(^\d{1,3}$|^\d{1,2}[.]\d$)/

更新:

您正在测试在按键事件中添加的字符,而不是输入字段的完整值。这永远不会有预期的结果。

document.getElementById("yourfield").onkeyup = function(e) {

    // the event
    if (!e) e = window.event;

    // determine the target of the keyup event (the input field)
    var targ;
    if (e.target)
       targ = e.target;
    else if (e.srcElement)
       targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
       targ = targ.parentNode;

    // get the value
    kchar = targ.value;
    numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;

    // test
    alert(numcheck.test(kchar));
}

【讨论】:

  • 不知何故,使用上面的代码,我无法在小数点后输入任何内容。
【解决方案2】:

试试/^\d{1,3}|(\d{1,2}\.\d)$/

你的角色类不应该逃脱句号,所以它应该是[.],虽然我更喜欢只写\.,因为为一个角色创建一个类是一种浪费。同样,\d{1} 是多余的,而 \d 的含义完全相同。我还假设您也不想允许空文本框,所以我写了一些允许 1-3 位数字或 1-2 位数字,一个句点,然后是一个数字。如果这是错误的,您可以将第一个 \d 的范围更改回 {0,3},这将允许文本框不包含任何内容。

【讨论】:

  • 我可以在代码中比较它 kchar = String.fromCharCode(knum);步骤??
  • 我的意思是,如果我在输入框中使用已经存在的文本并与输入的字符串连接,而不是使用单个字符并进行比较,则可以得到完整的文本?如果可能的话,有类似的事情吗?
  • 如果您愿意,将单个字符与/[0-9.]/ 进行比较,然后附加它们,然后在提交或处理值之前在末尾进行最后一次检查,以查看整体格式是否正确使用完整正则表达式。并且永远记住,他们可以关闭 JavaScript,然后在里面放任何东西。
【解决方案3】:

使用此回复:

/^\d{1,3}$|^\d{1,2}[.]\d$/

【讨论】:

  • 这违反了他们的条件 #2:“最后只有一位小数 (55.1)”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
相关资源
最近更新 更多