使用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插件。

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