【问题标题】:Regex to match if string contains integer/decimal with digits如果字符串包含带数字的整数/小数,则正则表达式匹配
【发布时间】:2016-11-05 01:18:38
【问题描述】:

我想写一个正则表达式,它允许一个整数,或一个十进制数,0 - 2 个十进制数字。

有效输入

1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11

无效输入

a
a.
1.a
1.111
1.1111
  • 字符串允许任意数量的数字字符,但只允许 1 个小数/句点
  • 如果存在句点/小数点:仅允许小数点后 2 位字符

这是我想出的正则表达式

\d*\.?([\d]){0,2}

我无法对其进行测试以确保其正常工作。我找到了几种测试方法。使用test 方法,我只是used w3schools setup here。另一种方法是使用一些 javascript 正则表达式测试器,例如 regexrregex101。对于所有这些:似乎我的正则表达式返回误报,或者我的正则表达式没有按预期工作。

问题:什么正则表达式会做我想做的事?

【问题讨论】:

  • 该正则表达式应该没问题,但也许您想将行首/行尾规则包含在:^\d*\.?([\d]){0,2}$

标签: javascript jquery


【解决方案1】:
  1. 您需要确保使用^...$ 检查完整的字符串(从第一个字符到最后一个字符)
  2. 第一个数字应至少出现 1 次(因此您要使用 + 而不是 *)。

检查这个例子:

r = /^\d+\.?\d{0,2}$/
tests = ['1', '1.', '1.1', '1.11', '111111111', '111111111.', '111111111.1', '111111111.11', 'a', 'a.', '1.a', '1.111', '1.1111']
tests.forEach(function(val) {
  console.log(val, val.match(r) ? ': valid' : ': invalid');
});

更新

遵循 cmets - 如果您需要“整数或具有 0 - 2 个十进制数字的十进制数”的解决方案(就像您在问题中所说的那样,但 不是有效的输入部分),你可以使用这个:

r = /^\d+(\.\d\d{0,1})?$/
console.log('1.'.match(r))

tests = ['1', '1.', '1.1', '1.11', '111111111', '111111111.', '111111111.1', '111111111.11', 'a', 'a.', '1.a', '1.111', '1.1111']
tests.forEach(function(val) {
  console.log(val, val.match(r) ? ': valid' : ': invalid');
});

【讨论】:

  • @RoryMcCrossan,我认为第一个 \d 上应该是 + 而不是 *
  • 我已经删除了我的答案并为你的答案投票,你打败了我:)
  • @DonCallisto,12. 有什么问题? OP 说这是一个有效的输入......(如果它无效,我会更改正则表达式以将其设置为无效......)
  • @Dekel 他在哪里说的?
  • @Neil,w3schools 不会保存您的代码。您可以为此使用 jsfiddle.net
【解决方案2】:

不要忘记在正则表达式中关闭和打开,许多新的正则表达式得到它并最终得到不需要的结果,一切都应该在 ^ 和 $ 之间,^ 是单词(数字)边界的起点,$ 是终点。 ..类似下面的东西应该可以帮助你,试试:

'use strict';
var decimal = /^\d+(\.\d\d{0,2})$/, num = 111111111.11;
console.log(decimal.test(num));

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多