我是JavaScript正则表达式的新手,有以下问题。
在我正在使用的JQuery脚本中,我有以下regex,它似乎可以检查variazioneAnticipo变量中的值是否为十进制数:
var variazioneAnticipo = $("#variazioneAnticipo").val();
if (/^[0-9]+(.[0-9]+)?$/.test(variazioneAnticipo)) {
..................................................
..................................................
DO SOMETHING
..................................................
..................................................
}
我认为这意味着上一个正则表达式对可以连接到的0到9(数字的整数部分)之间的任何数字连接都响应true符号(十进制分隔符),后跟由0到0(十进制部分)的数字组成的任何字符串。
因此它将接受字符串为:
105或105.1或105.12或105.31243123123131231
好的,我如何修改以前的正则表达式,使其只接受表示最多有2个十进制数字的字符串?
例如:
105必须被接受
105.1必须被接受
必须接受105.12
但是:
105.123不得接受
在.[0-9]
旁边添加重复或范围限定符。。
^[0-9]+(.[0-9]{1,2})?$
[0-9]{1,2}
应匹配一位或两位数字。
尝试将pattern
属性与RegExp
、^d+$|^d+.d+{2}$
、this.checkValidity()
一起使用
$("#variazioneAnticipo").on("input", function() {
if (this.checkValidity()) {
$("label").html("");
var variazioneAnticipo = $(this).val();
console.log(variazioneAnticipo
,this.checkValidity());
} else {
$("label").html("invalid input")
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<input id="variazioneAnticipo" class="rightAlligned form-control" style="width: 60%" type="number" step="0.01" min="0" value="${progetto.impAcc}" pattern="^d+$|^d+.d+{2}$"/>
<label></label>
下面的表达式只匹配最多有2位小数的数字。
^d+(?:.d{1,2})?$
要获得更好的解释,请单击此处
如果你想自定义它,只需修改重复的范围。例如:
修改N和/或M以更改接受的小数范围。
^\d+(?:.\d{N,M})?$
修改N和/或M以更改接受的整数范围。
^\d{N,M}(?:.\d{1,2})?$
下面的代码段将相关的regex应用于javascript test()指令。
function testRegex(){
var data = $("#digits").val();
if(/^d+(?:.d{1,2})?$/.test(data))
alert("It's ok");
else{
alert("Sorry, it's not a valid input");
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="digits" />
<button onclick="testRegex();" type="button">Test it</button>