我有以下QRegExpValidator
QRegExpValidator doubleValidator = new QRegExpValidator(QRegExp("[-+]?[0-9]*[\\.,]?[0-9]+([eE][-+]?[0-9]+)?"));
它应该是一个接受数字的Double Number验证器,它在字符串开头或在“ e”符号之后仅接受一个“ e”符号,一个逗号或点以及一个+或-符号。它适用于每种情况,除了它允许字符串以逗号或点开头。我尝试使用 [^ \\。,] 和变体,它们确实起作用了,但是在这种情况下,它还允许放置两个+号。
如何使它正常工作?
答案 0 :(得分:1)
app.post('/',(req,res) => {
mongoClient.connect(url,(err,db) => {
if(err){
console.log("Error:" +err);
}
else{
var obj = {Name : req.body.name};
var collection = db("User").collection("Users");
collection.insertOne(obj,(err,insertReponse) => {
if(err){
console.log("Error:" +err);
}
else{
res.send("Data has been saved");
}
});
}
});
});
模式允许[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?
或,
开头,因为.
和[-+]?
可以匹配空字符串,这是由于[0-9]*
(一次或零次出现)和?
(零次或多次出现)量词,然后*
匹配一次一次的[.,]
或.
。此外,如果默认情况下使用的方法不锚定模式,则还需要在模式周围使用,
和^
锚定。
我建议使用
解决该问题$
请注意,您无需在字符类中转义点,"^[-+]?[0-9]+([.,][0-9]+)?([eE][-+]?[0-9]+)?$"
^ ^^^^^^^^^^^^^^ ^
始终仅与点字符匹配。
[.]
匹配1+个数字,然后是[0-9]+([.,][0-9]+)?
或.
的可选序列,后跟1+个数字。