Я создаю форматтер, который форматирует цены. Идея состоит в том, что если пользователь вводит 'between 45 and 50
', он должен возвращать 'between $45.00 and $50.00
'. Или, если пользователь вводит «between 45.58 to 38.91
», он должен вернуться «between $45.58 to $38.91
»Регулярное выражение для определения чисел, но не десятичных
Это то, что я до сих пор -
function formatPricesInString($str){
var x = $str.match(/\d+/g);
if(x != null){
$.each(x, function(i, v){
$str = $str.replace(v, formatPrice(v));
});
}
return $str;
}
Здесь formatPrice (v) является еще одной функцией, в которой, если вы пройдете 45, его вернет 45,00 $.
Теперь к моей функции - formatPricesInString ($ ул), if I pass 45 - 50, it returns $45.00 - $50.00
, который прекрасно, но если я прохожу 45.00 - 50.00 it is returning $45.00.$00.00 - $50.00.$00.00
.
В основном, он принимает все цифры - 45, 00, 50, 00 и форматирует их.
Как я могу обработать такой сценарий, что если 45.00 или 45.56 передано, он ничего не должен делать, но если я просто передаю нормальное целое число в строке, он должен вернуть отформатированную цену.
Любой другой оптимизированный способ также приветствуется.
методformatPrice (...) -
function formatPrice(price) {
var symbol = $("#currencySymbolData").attr('data-symbol');
if (typeof symbol === "undefined" || symbol == '') {
symbol = '$';
}
var symbol_loc = $("#currencySymbolData").attr('data-symbol-loc');
if (typeof symbol_loc === "undefined" || symbol_loc == '') {
symbol_loc = 'before';
}
price = precise_round(price, 2).toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
if (symbol_loc == 'after') {
return price + symbol;
} else {
return symbol + price;
}
}
EDIT - Ответ
С помощью кода, предоставленной @RomanPerekhrest это работало -
function formatPricesInString($str){
return $str.replace(/(\$?\d+(\.\d+)?)\b/g, function(m){
m = (m[0] === '$')? m.slice(1) : m;
return formatPrice(m);
});
}
отредактировал мой вопрос. –
Вы можете проверить начальные пробелы или начало строки: '(^ | \ s) \ d +' ..или вы можете сделать десятичную факультативную, '\ d + (\. \ D +)?' ... или там 2 разных вопроса? '45,00' и' 45.56' должны иметь '$' добавленные, нет? – chris85
Да в конечном итоге да. Но пользователь также может вводить $ с числами. –