我只接受正十进制数字。这是我所做的:
$("#btn").on("click", function() {
var regex = new RegExp(/^\+?\d+,|\.?\d+$/);
var test = regex.test($("#param_valeur").val());
if (test == false) {
$.alert({
title: 'Erreur',
content: 'Veuillez saisir un nombre !',
});
} else {
$.post({
url:"/track/admin/configureSeuilHorsZone",
data:$("#frm").serialize(),
success:function(data, status, xhr) {
$("#george_content").load("/track/welcome");
}
});
}
});
但是在运行时它接受负数!那么如何禁止负数呢?
答案 0 :(得分:0)
您的正则表达式替换和模式没有按照您的想象做,但是无论如何,这是一个仅匹配正十进制数字/整数的正则表达式模式:
^\+?\d+(?:\.\d+)?$
如果您希望在整数部分使用逗号,请使用:
^\+?\d{1,3}(?:,\d{3})*(?:\.\d+)?$
以下是第二种正则表达式模式的说明:
^ from the start of the string
\+? match an optional leading + sign
\d{1,3} then match 1 to 3 digits
(?:,\d{3})* followed by zero or more thousands groups (e.g. ,123)
(?:\.\d+)? followed by an optional decimal component
$ end of string
答案 1 :(得分:0)
我不会为您提供替代的正则表达式,我将向您解释您的示例出了什么问题。
您正在使用管道令牌连接两个不同的正则表达式,它们是:
\+?\d+,
和
\.?\d+
乍一看,这似乎是正确的。问题是^
和$
的工作方式。 “行首”标记(^
)和“行尾”标记($
)仅适用于相邻的正则表达式,不适用于使用管道分隔的每个正则表达式。>
因此,如果插入一个负数,则“第二个”正则表达式将匹配,因为它只说“匹配包含可选点和数字序列的所有内容”,而没有关于行首的规则
要解决此问题,只需将两个正则表达式都放在括号中,这样“行首”和“行尾”将同时应用于这两者:
var regex = new RegExp(/^(\+?\d+,|\.?\d+)$/);
console.log(regex.test('-10'));
答案 2 :(得分:0)
为什么要使用正则表达式?只需检查输入是否为数字,然后检查该值是否小于0。
$("#btn").on("click", function() {
const value = $("#param_valeur").val()
if (isNaN(value) || value < 0) {
console.log('Error')
} else {
console.log('Success')
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="param_valeur" type="text">
<button id="btn">Check</button>
答案 3 :(得分:0)
我使用了此正则表达式:var regex = new RegExp(/^\+?\d+,?\d*$|^\+?\d+\.?\d*$/);
谢谢大家:)