【发布时间】:2020-07-16 00:04:27
【问题描述】:
我需要一些关于正则表达式的帮助,问题是我需要在 JavaScript 中使用 Replace 方法应用正则表达式。我在 Stackoverflow 看到了一些帖子,但是任何正则表达式都不起作用,我不知道为什么。
我需要用户只能输入以下数据:
100
100.2
100.23
注意:只有数字,最多可以有一位或两位小数。不允许使用其他符号,当然也不允许使用逗号。
我一直在阅读它,我使用了一些正则表达式生成器来查看匹配,所以我做了这个:
/^[a-zA-Z]+(\.[a-zA-Z]{0,2})?$/
一开始我有点迷糊,因为我在replace方法中使用了:
elementOne.addEventListener("input", function(event) {
this.value = this.value.replace(/^[a-zA-Z]+(\.[a-zA-Z]{0,2})?$/, '');
});
现在我读到的过程如下:如果我输入一个从 a 到 z 的字母,该方法将替换为空格 ''。但其余的在方法中不起作用,但在生成器中起作用。
这是一个示例,您将在第一个输入中看到我的正则表达式与 Sven.hig 正则表达式:
const elementOne = document.getElementById('elementOne');
const elementTwo = document.getElementById('elementTwo');
elementOne.addEventListener("input", function(event) {
this.value = this.value.replace(/^[a-zA-Z]+(\.[a-zA-Z]{0,2})?$/, '');
});
elementTwo.addEventListener("input", function(event) {
this.value = this.value.replace(/^\d+[,]?\d{0,2}/, '');
});
<p>Element One (My RegEx)</p>
<input id="elementOne" type="text" />
<p>Element Two (Stack RegEx)</p>
<input id="elementTwo" type="text" />
也可以作为CodePen
【问题讨论】:
-
我不清楚您要做什么。您的示例数据是数字,后跟一个可选的小数部分,但您的正则表达式说“用空字符串替换一对多的字母,后跟一个可选的点和 0-2 个字母。”你到底想做什么?
-
您是否错误地使用了点
.而不是逗号,?你想匹配字母还是数字? -
@ssc-hrep3 我使用点是因为帖子,我知道在拉丁美洲我们使用逗号。但可能是一样的。
-
@Jacob 这是我现在理解的替换过程的阅读:如果我尝试输入一个字母 [a-zA-Z]+,我将收到空白。但是如果我输入一个数字,我将被允许,但正则表达式的其余部分不起作用。我到底想做什么?只允许键入带小数的数字的输入。
-
您可能想查看stackoverflow.com/questions/8282266 和stackoverflow.com/questions/13607278 了解如何限制输入。或者您可以使用
<input type="number">,它允许小数(但不允许组分隔符),并且它允许的小数字符应该基于区域设置。作为奖励,type="number"通常会在移动设备上切换到数字键盘。
标签: javascript jquery regex