簡體   English   中英

正則表達式僅匹配某些字符或字符串,並且每個匹配僅一個實例?

[英]Regex to match only certain characters or strings and only one instance of each?

我覺得我對Regexes的了解不多,難以解決。 就是說,我有一個輸入字段,允許用戶輸入其貨幣符號。 我只想允許使用所述貨幣符號,並禁止在該字段中輸入其他任何內容。 有些國家實際上沒有單個符號,而只是兩個或三個字符,例如,克朗表示為“ Kr”。 因此,該字段的最大長度為3。由於它需要三個最大長度才能容納某些貨幣,因此我也不想輸入三個美元符號,例如“ $$$”。 我只想允許一個美元,英鎊,歐元等符號。

這是我的基本代碼,僅允許在輸入中使用這些符號:

$('#id_currency_symbol').on('input',function (){
    var value = $(this).val().toString();
    newvalue = value.replace(/[^$£€¥₣₩₩¥₽₺₹Rkr]+/g,'');
    $(this).val(newvalue);
});

這僅適用於允許這些符號/字母,但是就像我在上面說的那樣,我不想允許用戶輸入多個符號(例如美元符號($))的單個實例。 另外,對於“符號”實際上只是兩個或三個字符的情況,我想匹配精確的字符串。 在克朗(Krona)的情況下,“符號”是Kr。 鑒於上述情況,理論上用戶可以輸入“ rK”,並且根據正則表達式將是完全有效的,但是我只希望允許“ Kr”的精確匹配。 那可能嗎?

謝謝

您可能會使用正則表達式找到第一個出現的貨幣符號或縮寫,然后將整個輸入替換為匹配的字符串。 可以在[...]列出單字符貨幣,也可以通過交替添加任何更長的字符串:

 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")); 


為了完整性:

  1. “正則表達式僅匹配某些字符或字符串,每個匹配僅一個實例”

     ^(?:[$£€¥₣₩₩¥₽₺₹]|kr)$ 

    演示: https//regex101.com/r/w9p9d9/1

  2. 正則表達式除去“某些字符或字符串”之外的所有字符,如果這些字符出現多次(也用於newvalue = value.replace(...,''); ),則這些字符也將被剝離:

     ^(?=.*?([$£€¥₣₩₩¥₽₺₹]|kr)|).* 

    演示: https : //regex101.com/r/qocsv5/1

我建議您不要使用正則表達式,而選擇O(1)算法,

var allowedCurrencyCodes = {
      "$":true,
      "¢":true,
      "£":true,
      "INR":true,
      "Kr":true,
      .....,
      .....,
      .....
}
    $(this).val(allowedCurrencyCodes[$(this).val()]?$(this).val():"");

您需要在模糊事件或用戶輸入至少3個字符的情況下執行檢查,否則它將變得有問題,因為它將在第一個字符后繼續清除數據。

如果要保持實時檢查,即在用戶鍵入時做出響應,則需要更改allowedCurrencyCodes的結構,並將其轉換為嵌套的多字符貨幣代碼對象,例如,$,£完全相同,但INR或Kr將被定義為

"I":{
    "N":{
        "R":true
    }
},
"K":{
    "r":true
}

和在取邏輯微小變化將被應用,在這里將捕獲的輸入和它在陣列分割,然后浸在allowedCurrencyCodes基於輸入字符,如

allowedCurrencyCodes[inputChar[0]][inputChar[1]]

要么

allowedCurrencyCodes[inputChar[0]][inputChar[1]][inputChar[2]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM