jQuery——表示整数和逗号的regex——应该只接受成百上千和数百万



最大值应为99999999(末尾没有句点)。所以它应该接受:

  • 123
  • 1234
  • 10000
  • 100000
  • 1000000
  • 99000000
  • 等等

我发现这段代码非常适合浮点:

HTML

<input type="text" class="numberOnly" name="example" value="" required>

jQuery:

$('.numberOnly').keyup(function() {
var valid = /^-?d+.d*$|^-?[d]*$/;
var number = /-d+.d*|-[d]*|[d]+.[d]*|[d]+/;
if (!valid.test($(this).val())) {
var n = this.value.match(number);
this.value = n ? n[0] : '';
}
});

它接受的值是:1.1.1(它们甚至可以是负值。)

每当用户键入无效值时,例如1..,它会自动删除无效值,在这种情况下,无效值是第二个点。

我想为我的问题做一些类似的事情。这是我目前所掌握的,但显然不起作用。

HTML:

<input type="text" class="millions" name="example2" value="" required>

jQuery:

$('.millions').keyup(function() {
var valid = /^(d[0-0]{0,3}[,]d{0,9}[,])?d{0,9}$/;
var number = /d{0,9}[,](d{0,9}[,]d{0,9})?/;
if (!valid.test($(this).val())) {
var n = this.value.match(number);
this.value = n ? n[0] : '';
}
});

除了想知道我需要的正确regex格式外,还有人能解释一下有效数量变量的用途吗?

非常感谢!

valid模式是您对服务器端检查感兴趣的模式。它是用于检查整个字符串是否符合您的要求的模式。number模式是用于在用户键入非法字符时进行替换的模式。number模式需要更加宽松,以允许用户输入有效模式的子序列(例如1,0),然后用户可以将其完成为有效模式。

这种模式可以满足您的要求:

var valid = /^([1-9]d?(,d{3}){0,2}|[1-9]d{0,2}(,d{3})?|0)$/;

分解:

  • ^(-线路起点
  • [1-9]d{0,2}-第一组以一个非零数字开头,后跟0-1个数字
  • (,d{3}){0,2}-0-2或逗号分隔的三位数组
  • |[1-9]d{0,2}(,d{3})?-或三位前导组后接三位尾随组
  • |0-"0"本身有效
  • )$-线路末端

number模式更为复杂,因为它必须允许尾随逗号,并允许末尾少于三位数字的组。

最新更新