我觉得我对Regexes的了解已经足够了。也就是说,我有一个输入字段,允许用户输入他们的货币符号。我只想允许所述货币符号并禁止其他任何东西进入该字段。有些国家实际上没有一个符号,但只有两三个字符,例如" Kr"对于克朗。因此,该字段的最大长度为3.鉴于它需要最大长度为3以容纳某些货币,我也不想允许输入三个美元符号,例如" $$$& #34 ;.我只想允许一美元,英镑,欧元等标志。
这是我在输入中仅允许这些符号的基本代码:
$('#id_currency_symbol').on('input',function (){
var value = $(this).val().toString();
newvalue = value.replace(/[^$£€¥₣₩₩¥₽₺₹Rkr]+/g,'');
$(this).val(newvalue);
});
这仅适用于允许这些符号/字母,但正如我上面所述,我不想让用户输入多个符号的单个实例,即美元符号($)。另外,我希望匹配"符号"的情况下的确切字符串。实际上只有两三个字符。在Krona的情况下,"符号"是Kr。鉴于上述情况,用户理论上可以进入" rK"根据正则表达式它将完全有效,但我只想允许" Kr。"的完全匹配。这可能吗?
由于
答案 0 :(得分:0)
您可以使用正则表达式找到第一个出现的货币符号或首字母缩写词,然后用匹配的字符串替换整个输入。单个字符货币可以在[...]
中列出,任何更长的字符串都可以通过替换添加:
var checkInput = function(input) {
var regex = /[$£€¥₣₩₩¥₽₺₹]|kr/i;
input = regex.exec(input);
return input == null ? "" : input[0];
}
console.log(checkInput("lkjahfkdshfjsdf Kr asdasda"));
console.log(checkInput("kr"));
console.log(checkInput("rk"));
console.log(checkInput("$$$"));
console.log(checkInput("₣₩₩"));
console.log(checkInput("ABC"));

为了完整性:
"正则表达式只匹配某些字符或字符串,并且每个只有一个实例" :
^(?:[$£€¥₣₩₩¥₽₺₹]|kr)$
正则表达式除了"某些字符或字符串" 以及这些字符时,如果它们出现多次(在newvalue = value.replace(...,'');
内使用) :
^(?=.*?([$£€¥₣₩₩¥₽₺₹]|kr)|).*
答案 1 :(得分:0)
我建议忘记正则表达式,然后去找O(1)algos,
var allowedCurrencyCodes = {
"$":true,
"¢":true,
"£":true,
"INR":true,
"Kr":true,
.....,
.....,
.....
}
$(this).val(allowedCurrencyCodes[$(this).val()]?$(this).val():"");
你需要在模糊事件或者用户输入至少3个字符时执行检查,否则它会变得有问题,因为它会在第一个字符后立即擦除数据。
如果你想保持实时检查,即在用户输入时做出响应,那么你需要改变allowedCurrencyCodes
的结构并将其转换为多字母货币代码的嵌套对象,例如$,£will完全相同,但INR或Kr将被定义为
"I":{
"N":{
"R":true
}
},
"K":{
"r":true
}
将应用获取逻辑中的微小更改,您将捕获输入并将其拆分为数组,然后根据输入字符放入allowedCurrencyCodes
,例如
allowedCurrencyCodes[inputChar[0]][inputChar[1]]
或
allowedCurrencyCodes[inputChar[0]][inputChar[1]][inputChar[2]]