gpt4 book ai didi

javascript - 小数精度的动态正则表达式不起作用

转载 作者:行者123 更新时间:2023-12-01 02:18:41 24 4
gpt4 key购买 nike

我有以下用于十进制精度和小数位数的硬编码正则表达式,它可以工作(在另一个项目中):

// This would be a Decimal(2,3)
var regex = /\d{0,2}(\.\d{1,3})?$/;
var result = regex.test(text);

但是,我不想对多个变体进行硬编码。而且,有趣的是,以下失败了......但我不知道为什么。

我“认为”串联可能(以某种方式)影响“测试”

  • 我在这里做错了什么?

示例:

var validationRules = {
decimal: {
hasPrecision: function (precision, scale, text) {

var regex = new RegExp('\d{0,' + precision + '}(\.\d{1,' + scale + '})?$');
var result = regex.test(text);

// result is ALWAYS true ????
alert(result);
alert(regex);
}
}
};

失败示例片段:

$(document).ready(function () {

var validationRules = {
decimal: {
hasPrecision: function (precision, scale, text) {

var regex = new RegExp('\d{0,' + precision + '}(\.\d{1,' + scale + '})?$');
var result = regex.test(text);

alert(result);
alert(regex);
}
}
};

var masks = {
decimal: function (e) {

// TODO: get Kendo MaskedTextBox to run RegEx
var regex = new RegExp("^([0-9\.])$");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);

if (!regex.test(key)) {
event.preventDefault();
return false;
}
}
};

var button = $('.btn');
var textbox = $('.txt');

textbox.on('keypress', masks.decimal);
button.on('click', function () {
var text = textbox.val();

validationRules.decimal.hasPrecision(2, 3, text);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" value="1111" class="txt">
<input type="button" class="btn" value="Run it">

最佳答案

在构建动态字符串时始终查看结果。在您的情况下,您正在构建它并假设它正在变成您想要的 REGEX 模式。

例如,您实际构建的是:

d{0,2}(.d{1,3})?$
为什么?因为通过构造函数构建的 REGEX 模式(而不是文字)被构建为字符串 - 并且在字符串中 \ 被解释为转义字符。

但是,您需要这些反斜杠来坚持您的模式,因此您需要双重转义。实际上,您需要转义转义,以便保留最后一个转义。

var regex = new RegExp('\\d{0,' + precision + '}(\\.\\d{1,' + scale + '})?$');

这将产生与您的硬编码模式等效的结果,假设精度scale包含您认为它们包含的整数。也检查一下这个。 (例如,如果它们包含 float ,这将破坏您的模式。)

至于您的误报,这可能是由于缺少启动 anchor 指令,即 ^

/\d{0,2}(\.\d{1,3})?$/.test("1234"); //true
/^\d{0,2}(\.\d{1,3})?$/.test("1234"); //false, note ^

关于javascript - 小数精度的动态正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com