Regex Issues - Попытка перевести общее число в валюту - PullRequest
0 голосов
/ 12 апреля 2020

У меня проблема с использованием match(/.{1,3}/gi) или match(\/d{1,3}/g) для разделения строки на массив из 3 цифр.

if(me.iselement(finppnr.inpprice)) {
    finppnr.inpprice.addEventListener("keyup", function() {
        let raw, ret;
        raw = finppnr.inpprice.value.split(".");
        raw = raw.join("").toString();
        if(raw.length > 0) {
            ret = raw.split("").reverse().join("").match(/.{1,3}/gi);
            ret = ret.join(".").split("").reverse().join("");
        }
        finppnr.inpprice.value = ret;
    });
}

здесь HTML.

<div class="formcol">
    <div class="label">Item Price</div>
    <div class="field">
        <input class="inpprice finp" type="number">
    </div>
</div>

все, что если я введу в finppnr.inpprice больше, чем 1.000.000, будет выдано следующее предупреждение

Указанное значение "1.231.231" не является допустимым числом. Значение должно соответствовать следующему регулярному выражению: -? (\ D + | \ d +. \ D + |. \ D +) ([eE] [- +]? \ D +)?

И finppnr.inpprice.value внезапно стал '' (пустым). Между тем, использование прямой строки не возвращает никаких предупреждений или ошибок.

ret = "52990000".split("").reverse().join("").match(/.{1,3}/gi);
ret = ret.join(".").split("").reverse().join("");

Я новичок в этом регулярном выражении и просто еще не понимаю, как на самом деле работает регулярное выражение. Пожалуйста, помогите

1 Ответ

1 голос
/ 13 апреля 2020

Ваша проблема не в регулярном выражении, а в том, что вы используете вход number и задаете ему значение типа 52.990.000, , которое вообще не является допустимым числом !

Числовые входы не способны интерпретировать группирующие разделители, такие как , или ., поэтому такие числа, как 52,990,000, 52,990.999 и т. Д. c. все они недопустимы, и входные данные не смогут интерпретировать и, следовательно, отобразить их.

Число, например 999,999, с другой стороны, является действительным , поскольку . здесь просто действует как десятичная точка.

В целом, с вашим регулярным выражением все в порядке, у вас есть проблема с использованием числового ввода.

Одним из быстрых решений было бы переключиться на type="text", он может отображать произвольные символы.

Если вы решили сохранить ввод type="number", вам нужно будет найти другое решение, которое, вероятно, будет включать размещение ввода type="text" поверх ввода type="number" , чтобы оно могло отображать значение так, как вы ожидаете.

...