使用js实现数据格式化命令,使用js实现数据格式化的方法,使用js实现数据格式化

使用js实现数据格式化命令,使用js实现数据格式化的方法,使用js实现数据格式化

这篇文章主要介绍了使用Java语言(一种计算机语言,尤用于创建网站)描述语言实现数据格式化为字符串,非常的实用,这里推荐给有相同需求的小伙伴。

格式化是通过格式操作使任意类型的数据转换成一个字符串。例如下面这样

复制代码代码如下:

脚本

控制台。原木(切碎机。格式(' { 0 }-{ 1 }-{ 2 } ',12,24,25));//输出' 12 - 24 - 25 '

/脚本

下面是一个完整的代码,可以复制到自己的项目中。

复制代码代码如下:

!文档类型超文本标记语言

超文本标记语言

meta http-equiv=' Content-Type ' Content=' text/html;charset=utf-8 '

/头

身体

编写src=' http://代码脚本。jquery。com/jquery-1。9 .1 .量滴js '/脚本

脚本

(函数(){

var chopper=窗口。斩波器=窗户。chopper | | { culture:{ } },

数学=数学,

formatRegExp=/\{(\d )(:[^\}])?\}/g,

函数='函数,

字符串='字符串,

数字='数字,

OBJECT='object ',

NULL='null ',

布尔='布尔,

未定义='未定义,

slice=[].切片,

全球化=窗口。全球化,

standardformatregexp=/^(n|c|p|e)(\d*)$/i,

literalRegExp=/(\\ .)|(['][^']*[']?)|(['][^']*[']?)/g,

commaRegExp=/\,/g,

EMPTY=" ",

点=' . ',

逗号=',',

夏普='# ',

零='0 ',

PLACEHOLDER='?',

EN='en-US ',

objectToString={} .toString

//文化

chopper.cultures['en-US']={

名称:恩,

数字格式:{

模式:['-n'],

小数:2,

',': ',',

'.': '.',

组大小:[3],

百分比:{

模式:['-n % ',' n %'],

小数:2,

',': ',',

'.': '.',

组大小:[3],

符号:"%"

},

货币:{

模式:['($n)',' $n'],

小数:2,

',': ',',

'.': '.',

组大小:[3],

符号:' $ '

}

},

日历:{

标准:{

天数:{

名称:['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],

名称ABC br:['太阳','星期一','星期二','星期三','星期四,' Fri ','星期六'],

namesShort: [ 'Su ',' Mo ',' Tu ',' We ',' Th ',' Fr ',' Sa' ]

},

月数:{

名称:['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],

名称ABC br:['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月]

},

AM: [ 'AM ',' AM ',' AM' ],

PM: [ 'PM ',' PM ',' PM' ],

模式:{

'年/月/日,

'年月日,MMMM年月日',

女:“dddd,MMMM dd,yyyy h:mm:ss tt”,

'日/年/小时:分钟tt,

'日/年/时:分:秒tt,

男:“MMMM dd”,

男:“MMMM dd”,

s: 'yyyy'-'MM'-'ddTHH':'mm':'ss ',

汤:嗯,TT,

t:“h:mm:ss TT”,

u:' yyyy '-' MM '-' DD HH ':' MM ':' ss ' z ' ',

y: 'MMMM,yyyy ',

Y: 'MMMM,yyyy '

},

'/': '/',

':': ':',

第一天:0,

twoDigitYearMax: 2029

}

}

};

函数findCulture(文化){

如果(文化){

if (culture.numberFormat) {

回归文化;

}

如果(文化类型===字符串){

var cultures=chopper.cultures

返回cultures[culture]| | cultures[culture。split('-')[0]]| | null;

}

返回空

}

返回空

}

函数getCulture(culture) {

如果(文化){

文化=查找文化(文化);

}

返回文化| |菜刀。文化。当前;

}

函数expandNumberFormat(数字格式){

数字格式。组大小=数字格式。群体规模;

数字格式。百分比。组大小=数字格式。百分比。群体规模;

数字格式。货币。组大小=数字格式。货币。群体规模;

}

菜刀。区域性=函数(区域性名称){

var cultures=chopper.cultures,culture;

if (cultureName!==未定义){

culture=find culture(文化名)| | cultures[EN];

文化。日历=文化。日历。标准;

文化.当前=文化;

如果(全球化!globalize.load) {

expandNumberFormat(区域性。数字格式);

}

}否则{

返回文化.当前

}

};

菜刀。文化(英语);

//数字格式

函数格式编号(数字,格式,区域性){

culture=getCulture(文化);

var数字格式=区域性。数字格式,

组大小=数字格式。组大小[0],

组分隔符=数字格式[逗号],

小数=数字格式[点],

精度=数字格式。小数

模式=数字格式。模式[0],

文字=[],

符号,

isCurrency,isPercent,

自定义精度,

格式和精度,

负数=数字0,

整数,

分数,

整数长度,

分数长度,

替换=空,

值=空,

idx,

长度,

ch,

hasGroup,

hasNegativeFormat,

decimalIndex,

夏普指数,

零索引,

哈斯零,哈斯普,

百分比索引,

货币指数,

startZeroIndex,

start=-1,

结束;

//如果没有数字,则返回空字符串

if (number===undefined) {

空手而归;

}

如果(!isFinite(number)) {

退货数量;

}

//如果没有格式,则返回number.toString()或number.toLocaleString(),如果未定义文化.名称

如果(!格式){

返回culture.name .长度?号码。tolocalestring():number。tostring();

}

formatAndPrecision=standardformatregexp。exec(格式);

//标准格式

如果(格式和精度){

format=formatAndPrecision[1].toLowerCase();

isCurrency=format===' c

isPercent=format===' p

if (isCurrency || isPercent) {

//如果格式是货币或百分比,则获取特定的数字格式信息

numberFormat=isCurrency?数字格式。货币:数字格式。百分比;

组大小=数字格式。group size[0];

组分隔符=数字格式[逗号];

小数=数字格式[点];

精度=数字格式。小数;

symbol=数字格式. symbol

模式=数字格式。模式[负数?0 : 1];

}

custom precision=formatAndPrecision[2];

if (customPrecision) {

精度=自定义精度

}

//返回指数格式的数字

if (format==='e') {

返回customPrecision?号码。toexponential(precision):数字。to exponential();//toExponential()和到指数(未定义)在法国法郎#653438中不同。

}

//如果格式是百分比,则相乘

if (isPercent) {

数字*=100;

}

数字=四舍五入(数字,精度);

负数=数字0;

数字=数字. split(点);

integer=number[0];

分数=数字[1];

//如果数字为负数,则排除'-'。

如果(负){

整数=整数。子串(1);

}

值=整数;

整数长度=整数。长度;

//如果数字足够长,则在数字上添加组分隔符

if (integerLength=groupSize) {

值=空;

for(idx=0;idx integerLengthidx ) {

if(idx 0(整数长度-idx)%组大小===0){

值=groupSeparator

}

值=整数。charat(idx);

}

}

如果(分数){

值=小数部分;

}

if (format==='n '!负){

返回值;

}

数字=空;

for (idx=0,length=pattern.lengthidx长度;idx ) {

ch=模式。charat(idx);

if (ch==='n') {

数=值;

} else if (ch==='$' || ch==='%') {

数字=符号;

}否则{

数字=ch

}

}

退货数量;

}

//自定义格式

//

//用节来分隔格式。

//使数字为正数

如果(负){

数字=-数字;

}

如果(格式。(“”)-1 | |格式的索引。(“”)-1 | |格式的索引。的索引(“”)-1){

格式=格式。replace(literalRegExp,function (match) {

var quoteChar=match.charAt(0).替换(' \ ',''),

literal=match.slice(1).replace(quoteChar,' ');

文字. push(文字);

返回占位符;

});

}

格式=格式。拆分(';');

如果(否定格式[1]) {

//获取负格式

format=format[1];

hasNegativeFormat=true

} else if (number===0) {

//零的格式

format=format[2]| | format[0];

如果(格式。(SHARP)==-1格式的索引。(零)==-1)的索引{

//如果是字符串常量,则返回格式。

返回格式;

}

}否则{

format=format[0];

}

百分比索引=格式。的索引(" % ");

货币指数=格式。(“$”)的索引;

isPercent=percentIndex!=-1;

isCurrency=currencyIndex!=-1;

//如果格式有百分比,则乘以数字

if (isPercent) {

数字*=100;

}

if(is currency format[currency index-1]===' \ '){

format=format.split('\ ').联接("");

isCurrency=false

}

if (isCurrency || isPercent) {

//如果格式是货币或百分比,则获取特定的数字格式信息

numberFormat=isCurrency?数字格式。货币:数字格式。百分比;

组大小=数字格式。group size[0];

组分隔符=数字格式[逗号];

小数=数字格式[点];

精度=数字格式。小数;

symbol=数字格式. symbol

}

hasGroup=format.indexOf(逗号)-1;

if (hasGroup) {

格式=格式。replace(commaRegExp,EMPTY);

}

十进制索引=格式。(点)的索引;

长度=格式.长度

if (decimalIndex!=-1) {

分数=number.toString().拆分(' e ');

if (fraction[1]) {

分数=四舍五入(数字,数学。ABS(分数[1]);

}否则{

分数=分数[0];

}

分数=分数。split(POINT)[1]| |空;

zeroIndex=format.lastIndexOf(零)-十进制索引;

夏普指数=格式。lastindexof(SHARP)-十进制索引;

有零=零索引-1;

hass harp=夏普指数-1;

idx=分数。长度;

如果(!hasZero!hasSharp) {

format=format.substring(0,十进制索引)格式。子串(十进制索引1);

长度=格式.长度

十进制索引=-1;

idx=0;

}如果(有零零索引锐索引){

idx=零索引

} else if (sharpIndex zeroIndex) {

if (hasSharp idx sharpIndex) {

idx=sharpIndex

} else if (hasZero idx zeroIndex) {

idx=零索引

}

}

if (idx -1) {

数字=四舍五入(数字,idx);

}

}否则{

数=圆(数);

}

夏普指数=格式。(夏普)指数;

开始零索引=零索引=格式。的索引(零);

//定义第一个数字占位符的索引

if (sharpIndex==-1 zeroIndex!=-1) {

开始=零索引

} else if (sharpIndex!=-1 zeroIndex==-1) {

start=sharpIndex

}否则{

start=sharpIndex zeroIndex?零指数:尖指数;

}

夏普指数=格式。lastindexof(SHARP);

zeroIndex=format.lastIndexOf(零);

//定义最后一个数字占位符的索引

if (sharpIndex==-1 zeroIndex!=-1) {

end=zeroIndex

} else if (sharpIndex!=-1 zeroIndex==-1) {

end=sharpIndex

}否则{

end=sharpIndex zeroIndex?尖指数:零指数;

}

if (start==length) {

结束=开始;

}

如果(开始!=-1) {

value=number.toString().分裂(点);

integer=value[0];

分数=值[1] ||空;

整数长度=整数。长度;

fractionLength=分数。长度;

如果(负数(数字* -1)=0) {

负=假;

}

//如果数字足够长,则在数字上添加组分隔符

if (hasGroup) {

if(整数长度===组大小整数长度小数索引-起始零索引){

整数=groupSeparator整数;

} else if(整数长度组大小){

值=空;

for(idx=0;idx integerLengthidx ) {

if(idx 0(整数长度-idx)%组大小===0){

值=groupSeparator

}

值=整数。charat(idx);

}

整数=值;

}

}

number=format.substring(0,start);

如果(负!hasNegativeFormat) {

number='-';

}

for(idx=start;idx长度;idx ) {

ch=格式。charat(idx);

if (decimalIndex==-1) {

if (end - idx integerLength) {

数字=整数;

打破;

}

}否则{

if (zeroIndex!=-1 zeroIndex idx) {

替换=空;

}

if((decimal index-idx)=1整数长度decimalIndex - idx -1) {

数字=整数;

idx=decimalIndex

}

if (decimalIndex===idx) {

数=(分数?小数:空)分数;

idx=结束十进制索引1;

继续;

}

}

if (ch===零){

数字=ch

替换=ch

} else if (ch===SHARP) {

数量=替换;

}

}

if (end=start) {

数字=格式。子串(结束1);

}

//

replace symbol placeholders ???????????????????? if (isCurrency || isPercent) { ???????????????????????? value = EMPTY; ???????????????????????? for (idx = 0, length = number.length; idx < length; idx++) { ???????????????????????????? ch = number.charAt(idx); ???????????????????????????? value += (ch === "$" || ch === "%") ? symbol : ch; ???????????????????????? } ???????????????????????? number = value; ???????????????????? } ???????????????????? length = literals.length; ???????????????????? if (length) { ???????????????????????? for (idx = 0; idx < length; idx++) { ???????????????????????????? number = number.replace(PLACEHOLDER, literals[idx]); ???????????????????????? } ???????????????????? } ???????????????? } ???????????????? return number; ???????????? } ???????????? var round = function(value, precision) { ???????????????? precision = precision || 0; ???????????????? value = value.toString().split('e'); ???????????????? value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision))); ???????????????? value = value.toString().split('e'); ???????????????? value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision)); ???????????????? return value.toFixed(precision); ???????????? }; ???????????? var toString = function(value, fmt, culture) { ???????????????? if (fmt) { ???????????????????? if (typeof value === NUMBER) { ???????????????????????? return formatNumber(value, fmt, culture); ???????????????????? } ???????????????? } ???????????????? return value !== undefined ? value : ""; ???????????? }; ???????????? if (globalize && !globalize.load) { ???????????????? toString = function(value, format, culture) { ???????????????????? if ($.isPlainObject(culture)) { ???????????????????????? culture = culture.name; ???????????????????? } ???????????????????? return globalize.format(value, format, culture); ???????????????? }; ???????????? } ???????????? chopper.format = function(fmt) { ???????????????? var values = arguments; ???????????????? return fmt.replace(formatRegExp, function(match, index, placeholderFormat) { ???????????????????? var value = values[parseInt(index, 10) + 1]; ???????????????????? return toString(value, placeholderFormat ? placeholderFormat.substring(1) : ""); ???????????????? }); ???????????? }; ???????? })(); ???????? </script> ???? </body> ?</html>

API:

复制代码 代码如下: chopper.format('{0} is playing {1}', 'Xiaoming', 'basketball'); // outputs "Xiaoming is playing basketball" // 价格 chopper.format('{0:c} - {1:c}', 10, 20); // outputs "10.00?20.00" // 指数 chopper.format('指数: {0:e}', 25); // outputs "指数: 2.5e+1" // 百分数 chopper.format('百分数: {0:p}', 25); // outputs "百分数: 2,500.00 %" // 小数 chopper.format('小数: {0:n}', 25); // outputs "小数: 25.00"

小结:

开发中格式化数据还是经常用到的,比如我们要根据变量提示不同的信息,但是内容模板都是一样的,这样的话我们就可以使用此方法。如果你的项目使用jQuery,你也可以将上面的javascript封装成jQuery插件。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: