Более общий способ сопоставления дефисов заключается в использовании символьного класса для дефиса и тире («\ p {Pd}» без кавычек). Если вы имеете дело с текстом из разных культур и источников, вы можете обнаружить, что существует больше типов делений, а не только один символ. Вы можете добавить, что внутри выражения []
@Пол Крейси имел простейшее решение в виде регекса, но вот он, как простой плагин jQuery:
$.fn.digits = function(){
return this.each(function(){
$(this).text( $(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") );
})
}
Вы могли бы использовать его следующим образом:
$("span.numbers").digits();
Можно попробовать NumberFormatter.
$(this).format({format:"#,###.00", locale:"us"});
Он также поддерживает различные локали, включая, конечно, US.
Вот очень упрощенный пример его использования:
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.numberformatter.js"></script>
<script>
$(document).ready(function() {
$(".numbers").each(function() {
$(this).format({format:"#,###", locale:"us"});
});
});
</script>
</head>
<body>
<div class="numbers">1000</div>
<div class="numbers">2000000</div>
</body>
</html>
Вывод:
1,000
2,000,000
Что-то вроде этого, если вы увлекаетесь регексом, не знаете точного синтаксиса для замены tho!
MyNumberAsString.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
Это не jQuery, но он работает на меня. Взято с этого сайта .
function addCommas(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
Вы также можете посмотреть на плагин jquery FormatCurrency (автором которого я являюсь); он также имеет поддержку нескольких локалей, но может иметь накладные расходы валютной поддержки, которые вам не нужны.
$(this).formatCurrency({ symbol: '', roundToDecimalPlace: 0 });