带10万分隔符的Jquery价格格式
Jquery price format with lakhs separator?
我得到了Jquery价格格式Jquery插件,它可以很好地与千位分隔符配合使用(例如:32'32232.33),但我也需要带有千位的10万位分隔符,比如(32'3223.23),我已经更改了Jquery,但它似乎只适用于10万位,而不适用于带有千位和的10万
format.js
/*
* Price Format jQuery Plugin
* Created By Eduardo Cuducos cuducos [at] gmail [dot] com
* Currently maintained by Flavio Silveira flavio [at] gmail [dot] com
* Version: 1.7
* Release: 2012-02-22
* original char limit by Flavio Silveira <http://flaviosilveira.com>
* original keydown event attachment by Kaihua Qi
* keydown fixes by Thasmo <http://thasmo.com>
* Clear Prefix on Blur suggest by Ricardo Mendes from PhonoWay
* original allow negative by Cagdas Ucar <http://carsinia.com>
* keypad fixes by Carlos Vinicius <http://www.kvinicius.com.br> and Rayron Victor
* original Suffix by Marlon Pires Junior
* CentsLimit set to zero fixed by Jereon de Jong
* original idea for the use of the plus sign
*/
(function($) {
/****************
* Main Function *
*****************/
$.fn.priceFormat = function(options)
{
var defaults =
{
prefix: 'US$ ',
suffix: '',
centsSeparator: '.',
thousandsSeparator: ',',
lakhsSeparator: "'",
limit: false,
centsLimit: 2,
clearPrefix: false,
clearSufix: false,
allowNegative: false,
insertPlusSign: false
};
var options = $.extend(defaults, options);
return this.each(function()
{
// pre defined options
var obj = $(this);
var is_number = /[0-9]/;
// load the pluggings settings
var prefix = options.prefix;
var suffix = options.suffix;
var centsSeparator = options.centsSeparator;
var thousandsSeparator = options.thousandsSeparator;
var lakhsSeparator = options.lakhsSeparator;
var limit = options.limit;
var centsLimit = options.centsLimit;
var clearPrefix = options.clearPrefix;
var clearSuffix = options.clearSuffix;
var allowNegative = options.allowNegative;
var insertPlusSign = options.insertPlusSign;
// If insertPlusSign is on, it automatic turns on allowNegative, to work with Signs
if (insertPlusSign) allowNegative = true;
// skip everything that isn't a number
// and also skip the left zeroes
function to_numbers (str)
{
var formatted = '';
for (var i=0;i<(str.length);i++)
{
char_ = str.charAt(i);
if (formatted.length==0 && char_==0) char_ = false;
if (char_ && char_.match(is_number))
{
if (limit)
{
if (formatted.length < limit) formatted = formatted+char_;
}
else
{
formatted = formatted+char_;
}
}
}
return formatted;
}
// format to fill with zeros to complete cents chars
function fill_with_zeroes (str)
{
while (str.length<(centsLimit+1)) str = '0'+str;
return str;
}
// format as price
function price_format (str)
{
// formatting settings
var formatted = fill_with_zeroes(to_numbers(str));
var thousandsFormatted = '';
var thousandsCount = 0;
var lakhsFormatted = '';
var lakhsCount = 0;
// Checking CentsLimit
if(centsLimit == 0)
{
centsSeparator = "";
centsVal = "";
}
// split integer from cents
var centsVal = formatted.substr(formatted.length-centsLimit,centsLimit);
var integerVal = formatted.substr(0,formatted.length-centsLimit);
// apply cents pontuation
formatted = (centsLimit==0) ? integerVal : integerVal+centsSeparator+centsVal;
// apply thousands pontuation
if (thousandsSeparator || $.trim(thousandsSeparator) != "")
{
for (var j=integerVal.length;j>0;j--)
{
char_ = integerVal.substr(j-1,1);
thousandsCount++;
if (thousandsCount%3==0) char_ = thousandsSeparator+char_;
thousandsFormatted = char_+thousandsFormatted;
}
//
if (thousandsFormatted.substr(0,1)==thousandsSeparator) thousandsFormatted = thousandsFormatted.substring(1,thousandsFormatted.length);
formatted = (centsLimit==0) ? thousandsFormatted : thousandsFormatted+centsSeparator+centsVal;
}
// apply lakhs pontuation
if (lakhsSeparator || $.trim(lakhsSeparator) != "")
{
for (var j=integerVal.length;j>0;j--)
{
char_ = integerVal.substr(j-1,1);
char1_ = integerVal.substr(j-1,1);
lakhsCount++;
if (lakhsCount%5==0)
char_ =lakhsSeparator+char_;
lakhsFormatted = char_+lakhsFormatted;
}
if (lakhsFormatted.substr(0,1)==lakhsSeparator) lakhsFormatted = lakhsFormatted.substring(1,lakhsFormatted.length);
formatted = (centsLimit==0) ? lakhsFormatted : lakhsFormatted+centsSeparator+centsVal;
}
// if the string contains a dash, it is negative - add it to the begining (except for zero)
if (allowNegative && str.indexOf('-') != -1 && (integerVal != 0 || centsVal != 0))
formatted = '-' + formatted;
else if (insertPlusSign && (integerVal != 0 || centsVal != 0))
formatted = '+' + formatted;
// apply the prefix
if (prefix) formatted = prefix+formatted;
// apply the suffix
if (suffix) formatted = formatted+suffix;
return formatted;
}
// filter what user type (only numbers and functional keys)
function key_check (e)
{
var code = (e.keyCode ? e.keyCode : e.which);
var typed = String.fromCharCode(code);
var functional = false;
var str = obj.val();
var newValue = price_format(str+typed);
// allow key numbers, 0 to 9
if((code >= 48 && code <= 57) || (code >= 96 && code <= 105)) functional = true;
// check Backspace, Tab, Enter, Delete, and left/right arrows
if (code == 8) functional = true;
if (code == 9) functional = true;
if (code == 13) functional = true;
if (code == 46) functional = true;
if (code == 37) functional = true;
if (code == 39) functional = true;
// Minus Sign, Plus Sign
if (allowNegative && (code == 189 || code == 109)) functional = true; // dash as well
if (insertPlusSign && (code == 187 || code == 107)) functional = true;
if (!functional)
{
e.preventDefault();
e.stopPropagation();
if (str!=newValue) obj.val(newValue);
}
}
// inster formatted price as a value of an input field
function price_it ()
{
var str = obj.val();
var price = price_format(str);
if (str != price) obj.val(price);
}
// Add prefix on focus
function add_prefix()
{
var val = obj.val();
obj.val(prefix + val);
}
function add_suffix()
{
var val = obj.val();
obj.val(val + suffix);
}
// Clear prefix on blur if is set to true
function clear_prefix()
{
if($.trim(prefix) != '' && clearPrefix)
{
var array = obj.val().split(prefix);
obj.val(array[1]);
}
}
// Clear suffix on blur if is set to true
function clear_suffix()
{
if($.trim(suffix) != '' && clearSuffix)
{
var array = obj.val().split(suffix);
obj.val(array[0]);
}
}
// bind the actions
$(this).bind('keydown.price_format', key_check);
$(this).bind('keyup.price_format', price_it);
$(this).bind('focusout.price_format', price_it);
// Clear Prefix and Add Prefix
if(clearPrefix)
{
$(this).bind('focusout.price_format', function()
{
clear_prefix();
});
$(this).bind('focusin.price_format', function()
{
add_prefix();
});
}
// Clear Suffix and Add Suffix
if(clearSuffix)
{
$(this).bind('focusout.price_format', function()
{
clear_suffix();
});
$(this).bind('focusin.price_format', function()
{
add_suffix();
});
}
// If value has content
if ($(this).val().length>0)
{
price_it();
clear_prefix();
clear_suffix();
}
});
};
/**********************
* Remove price format *
***********************/
$.fn.unpriceFormat = function(){
return $(this).unbind(".price_format");
};
/******************
* Unmask Function *
*******************/
$.fn.unmask = function(){
var field = $(this).val();
var result = "";
for(var f in field)
{
if(!isNaN(field[f]) || field[f] == "-") result += field[f];
}
return result;
};
})(jQuery);
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="format.js"></script>
<script type="text/javascript">
$(function(){
$('#price').priceFormat({
prefix: '',
thousandsSeparator: ',',
lakhsSeparator: "'"
});
$('#price1').priceFormat({
prefix: '',
thousandsSeparator: ''
});
});
</script>
</head>
<body>
<input type="text" id="price">
</body>
</html>
为什么这不起作用?请告知我。
您只需要将thousandsCount%5==0
添加到原始http://jquerypriceformat.com/txt/jquery.price_format.1.8.js_.txt获取10万个
if (thousandsCount%3==0 || thousandsCount%5==0 ) char_ = thousandsSeparator+char_;
thousandsFormatted = char_+thousandsFormatted;
这就是您的代码所做的
例如,数字为123467.89
- 使用"千"格式时,数字将更改为1234,67.89
- 再次在步骤2中,您的代码再次将数字格式化为123467.89,但它不是将数字1234,6789作为输入,而是将原始整数值134567
- 作为回报,您得到的是输出123467.89,而不是您想要的输出2,34567.89(当然您的问题是问这个)
在Chrome 28中,以下操作将起作用:
Number(123456789).toLocaleString("bn-IN-u-nu-latn")
>> 12,34,56,789
这里的技巧是,由于en-IN
区域设置指定xxx、xxx、xxx格式,我们使用孟加拉语区域设置,区域设置扩展u-nu-latn
要求使用拉丁数字。
这似乎在Firefox或IE,甚至IE10中都不起作用。
这显然是在利用ECMAScript国际化API。请参阅是否有用于JavaScript的i18n(Intl)填充程序?,javascript数字/货币格式等
就我个人而言,我还没有看到过使用省略号的1'23456格式,但如果你真的想这样做,你必须回到滚动自己的,因为ECMAScript国际化API不支持自定义格式。
不要重新实现轮子,只需获取jQuery Globalize并使用内置的格式化程序。此外,使用Globalize,您的应用程序将可本地化。
var price = Globalize.format( 123456789.00, "c", "bn-IN");
//-> "টা 12,34,56,789.00"
请注意Globalize可与jQuery UI小部件配合使用,例如微调器。
我已经修改了您正在使用的插件。它会将数字格式化为1,23,45678.90。添加了一个新的useLakhs标志,所以记住也要使用它。将原始代码与我所做的更改进行比较,可以让您了解出了什么问题。
/*
* Price Format jQuery Plugin
* Created By Eduardo Cuducos cuducos [at] gmail [dot] com
* Currently maintained by Flavio Silveira flavio [at] gmail [dot] com
* Version: 1.7
* Release: 2012-02-22
* original char limit by Flavio Silveira <http://flaviosilveira.com>
* original keydown event attachment by Kaihua Qi
* keydown fixes by Thasmo <http://thasmo.com>
* Clear Prefix on Blur suggest by Ricardo Mendes from PhonoWay
* original allow negative by Cagdas Ucar <http://carsinia.com>
* keypad fixes by Carlos Vinicius <http://www.kvinicius.com.br> and Rayron Victor
* original Suffix by Marlon Pires Junior
* CentsLimit set to zero fixed by Jereon de Jong
* original idea for the use of the plus sign
*/
(function($) {
/****************
* Main Function *
*****************/
$.fn.priceFormat = function(options)
{
var defaults =
{
prefix: 'US$ ',
suffix: '',
centsSeparator: '.',
thousandsSeparator: ',',
useLakhs: false,
lakhsSeparator: ",",
limit: false,
centsLimit: 2,
clearPrefix: false,
clearSufix: false,
allowNegative: false,
insertPlusSign: false
};
var options = $.extend(defaults, options);
return this.each(function()
{
// pre defined options
var obj = $(this);
var is_number = /[0-9]/;
// load the pluggings settings
var prefix = options.prefix;
var suffix = options.suffix;
var centsSeparator = options.centsSeparator;
var thousandsSeparator = options.thousandsSeparator;
var lakhsSeparator = options.lakhsSeparator;
var limit = options.limit;
var centsLimit = options.centsLimit;
var clearPrefix = options.clearPrefix;
var clearSuffix = options.clearSuffix;
var allowNegative = options.allowNegative;
var insertPlusSign = options.insertPlusSign;
var useLakhs = options.useLakhs;
// If insertPlusSign is on, it automatic turns on allowNegative, to work with Signs
if (insertPlusSign) allowNegative = true;
// skip everything that isn't a number
// and also skip the left zeroes
function to_numbers (str)
{
var formatted = '';
for (var i=0;i<(str.length);i++)
{
char_ = str.charAt(i);
if (formatted.length==0 && char_==0) char_ = false;
if (char_ && char_.match(is_number))
{
if (limit)
{
if (formatted.length < limit) formatted = formatted+char_;
}
else
{
formatted = formatted + char_;
}
}
}
return formatted;
}
// format to fill with zeros to complete cents chars
function fill_with_zeroes (str)
{
while (str.length < (centsLimit+1)) str = '0' + str;
return str;
}
// format as price
function price_format(str)
{
// formatting settings
var formatted = fill_with_zeroes(to_numbers(str));
var thousandsFormatted = '';
var thousandsCount = 0;
var lakhsFormatted = '';
var lakhsCount = 0;
// Checking CentsLimit
if(centsLimit == 0)
{
centsSeparator = "";
centsVal = "";
}
// split integer from cents
var centsVal = formatted.substr(formatted.length - centsLimit, centsLimit);
var integerVal = formatted.substr(0, formatted.length - centsLimit);
// apply cents pontuation
formatted = (centsLimit == 0) ? integerVal : integerVal + centsSeparator + centsVal;
// apply thousands pontuation
if (thousandsSeparator || $.trim(thousandsSeparator) != "")
{
for (var j = integerVal.length; j > 0; j--)
{
char_ = integerVal.substr(j - 1, 1);
thousandsCount++;
if (thousandsCount % 3 == 0) char_ = thousandsSeparator + char_;
thousandsFormatted = char_ + thousandsFormatted;
}
if (thousandsFormatted.substr(0, 1) == thousandsSeparator)
thousandsFormatted = thousandsFormatted.substring(1, thousandsFormatted.length);
formatted = (centsLimit == 0) ? thousandsFormatted : thousandsFormatted + centsSeparator + centsVal;
}
// apply lakhs pontuation
if (useLakhs &&(lakhsSeparator || $.trim(lakhsSeparator) != ""))
{
var flag = false;
for (var j = integerVal.length; j > 0; j--)
{
char_ = integerVal.substr(j - 1, 1);
lakhsCount++;
if (lakhsCount % 3 == 0 && !flag) {char_ = thousandsSeparator + char_; flag = true;}
else if ((lakhsCount - 3) % 2 == 0 && flag) char_ = lakhsSeparator + char_;
lakhsFormatted = char_ + lakhsFormatted;
}
if (lakhsFormatted.substr(0, 1) == lakhsSeparator)
lakhsFormatted = lakhsFormatted.substring(1, lakhsFormatted.length);
formatted = (centsLimit == 0) ? lakhsFormatted : lakhsFormatted + centsSeparator + centsVal;
}
// if the string contains a dash, it is negative - add it to the begining (except for zero)
if (allowNegative && str.indexOf('-') != -1 && (integerVal != 0 || centsVal != 0))
formatted = '-' + formatted;
else if (insertPlusSign && (integerVal != 0 || centsVal != 0))
formatted = '+' + formatted;
// apply the prefix
if (prefix) formatted = prefix + formatted;
// apply the suffix
if (suffix) formatted = formatted + suffix;
return formatted;
}
// filter what user type (only numbers and functional keys)
function key_check (e)
{
var code = (e.keyCode ? e.keyCode : e.which);
var typed = String.fromCharCode(code);
var functional = false;
var str = obj.val();
var newValue = price_format(str + typed);
// allow key numbers, 0 to 9
if((code >= 48 && code <= 57) || (code >= 96 && code <= 105)) functional = true;
// check Backspace, Tab, Enter, Delete, and left/right arrows
if (code == 8) functional = true;
if (code == 9) functional = true;
if (code == 13) functional = true;
if (code == 46) functional = true;
if (code == 37) functional = true;
if (code == 39) functional = true;
// Minus Sign, Plus Sign
if (allowNegative && (code == 189 || code == 109)) functional = true; // dash as well
if (insertPlusSign && (code == 187 || code == 107)) functional = true;
if (!functional)
{
e.preventDefault();
e.stopPropagation();
if (str!=newValue) obj.val(newValue);
}
}
// inster formatted price as a value of an input field
function price_it ()
{
var str = obj.val();
var price = price_format(str);
if (str != price) obj.val(price);
}
// Add prefix on focus
function add_prefix()
{
var val = obj.val();
obj.val(prefix + val);
}
function add_suffix()
{
var val = obj.val();
obj.val(val + suffix);
}
// Clear prefix on blur if is set to true
function clear_prefix()
{
if($.trim(prefix) != '' && clearPrefix)
{
var array = obj.val().split(prefix);
obj.val(array[1]);
}
}
// Clear suffix on blur if is set to true
function clear_suffix()
{
if($.trim(suffix) != '' && clearSuffix)
{
var array = obj.val().split(suffix);
obj.val(array[0]);
}
}
// bind the actions
$(this).bind('keydown.price_format', key_check);
$(this).bind('keyup.price_format', price_it);
$(this).bind('focusout.price_format', price_it);
// Clear Prefix and Add Prefix
if(clearPrefix)
{
$(this).bind('focusout.price_format', function()
{
clear_prefix();
});
$(this).bind('focusin.price_format', function()
{
add_prefix();
});
}
// Clear Suffix and Add Suffix
if(clearSuffix)
{
$(this).bind('focusout.price_format', function()
{
clear_suffix();
});
$(this).bind('focusin.price_format', function()
{
add_suffix();
});
}
// If value has content
if ($(this).val().length>0)
{
price_it();
clear_prefix();
clear_suffix();
}
});
};
/**********************
* Remove price format *
***********************/
$.fn.unpriceFormat = function(){
return $(this).unbind(".price_format");
};
/******************
* Unmask Function *
*******************/
$.fn.unmask = function(){
var field = $(this).val();
var result = "";
for(var f in field)
{
if(!isNaN(field[f]) || field[f] == "-") result += field[f];
}
return result;
};
})(jQuery);
$(function(){
$('#price').priceFormat({
prefix: 'Rs. ',
thousandsSeparator: ',',
lakhsSeparator: "'",
useLakhs: true
});
});
让我知道这对你来说是如何运作的。
- 如何使用javascript或html下载PDF格式的填写表单
- 货币代码为欧元-金额的格式不应包含小数
- Json数据包含日期和时间格式
- Javascript日期格式类似于ISO,但本地
- 更改angularjs中的日期-时间格式
- 将日期时间从json转换为可读格式
- NodeJS日期格式不起作用
- 我能得到正确的格式吗
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 将日期和时间转换为UTC格式的日期-Javascript
- Javascript格式UTC日期
- 元素的内容必须由格式正确的字符数据或标记组成
- Datetime格式为Friendly Time.Moment JS输出错误
- 将客户端特定的日期格式返回到服务器MVC4
- 将数字四舍五入到小数点后两位,以设置货币格式
- javascript/jquery将utc转换为短格式的本地时间
- JavaScript生成html格式的密码
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- 如何通过数据分组将json数据转换为嵌套的json数据格式