{︶HB︶}一段数字格式化代码,顺便一些... ... 似乎小数点后面不要格式化吧,还有就是如果能自定义格式化的格式就好了,如VB里的FORMAT 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 hbhbhbhbhb1021 (天外水火(我要多努力))---斑竹牛人呀 to ttyp(@http://www.cnblogs.com/ttyp/) 有道理,我改动了下,但是现在还是不是太好,因为不能满足设置"###,##"这种格式,我想 可以设置一个数组堆栈,来实现这个,从最后开始匹配,匹配到了就进栈,晚上我整理下。to DeluxWorld(曾经的你) 谢谢to sanshisong(三师兄) 我争取以后成为牛人to youbl(wolf) 是,接受,加了些注释<script language=javascript> /* 数字格式化函数 总体思路,首先把数字分成整数和小数两部分, 把整数部分逆序之后在通过计数器添加分割字符 小数部分少了逆序部分 */ String.prototype.HBformatNumber=function(FormatPartternNum,FormatParttern) { function formatNUM(num) { jishuNum=-1;//初始化一个计数器 NumArray=num.split("\.") str1=NumArray[0].split("").reverse().join("").replace(/\d/g,function($1){jishuNum++;return((jishuNum%FormatPartternNum==0)&&(jishuNum!=0))?FormatParttern+$1:$1}).split("").reverse().join("") jishuNum=-1;//重新初始化计数器用于小数部分 return (NumArray.length==1)?str1:(str1+"."+(NumArray[1].replace(/\d/g,function($1){jishuNum++;return((jishuNum%FormatPartternNum==0)&&(jishuNum!=0))?FormatParttern+$1:$1}))) } return (/^(([1-9]\d*)|(0))(\.\d*)?$/.test(this))?formatNUM(this):"不是数字格式"//判断格式是否符合数字 } var a="12324536789.1243211";//在这里修改要格式化的字符串 alert(a.HBformatNumber(4,"-"))//参数1为输入几个数字一隔,参数2为中间间隔的符号</script> 谢谢大家给我的建议我改了下,现在支持自定义数字格式化了,大家继续提啊<script language=javascript> /* 参数1:以#表示数字,可加入小数点,格式化后的样式 参数2:每组格式之间的连接符 */ String.prototype.HBformatNumber=function(FormatParttern,ConnectOption) { if(!/#/.test(FormatParttern))//判断格式是不是可以进行格式化 { return "格式错误"; } var FormatPartternArray=FormatParttern.split("\.");//分开小数部分和整数部分的格式 function splitNUM(num)//此函数进行分开数字 { NumArray=num.split("\.") if(NumArray.length==1) { return formatNUM(NumArray[0],FormatPartternArray[0],true) } else { if(FormatPartternArray.length==1) { return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+NumArray[1] } else { return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+formatNUM(NumArray[1],FormatPartternArray[1],false) } } } return (/^(([1-9]\d*)|(0))(\.\d*)?$/.test(this))?splitNUM(this):"不是数字格式"//判断格式是否符合数字 /* 格式化数字函数 参数1:待格式化的数字 参数2:格式化样式 参数3:是否为整数格式化,true为整数格式化,false为小数 */ function formatNUM(num,Formatparttern,ifInterger) { var IntergerPushArray=new Array();//定义一个数组栈来存放整数 var IntergerFormatPartternNum=Formatparttern.match(/\#/g).length //得到一组格式化样式中包含多少个数字/ var IntegerParttern=(ifInterger)?(new RegExp(Formatparttern.replace(/[^#]/g,"").replace(/#/g,"\\d")+"$")):new RegExp("^"+Formatparttern.replace(/[^#]/g,"").replace(/#/g,"\\d"))//创建正则为了把每组数字取出来 while(IntegerParttern.test(num)) { IntergerPushArray.push(num.match(IntegerParttern))//把每一组放到数组中 num=num.replace(IntegerParttern,"");//去掉这组,去拿下一组 } if(num!="") { var RemainNum=num.match(/\d/g).length//剩下不够一组数字的时候判断还有几个数字 var deleteNum=IntergerFormatPartternNum-RemainNum//一会需要去掉的数字个数 for(var i=0;i<IntergerFormatPartternNum;i++)//把最后一组不够的位数加0填充 { num=(ifInterger)?("0"+num):(num+"0") } num=(ifInterger)?num.substr((num.length-parseInt(IntergerFormatPartternNum))):num.substr(0,IntergerFormatPartternNum)//得到最后一个格式化后的函数 IntergerPushArray.push(num);//将最后一组进栈 } var StrArrayParttern="" for(var i=0;i<IntergerFormatPartternNum;i++) { StrArrayParttern=StrArrayParttern+"(\\d)" } var ArrayParttern=new RegExp(StrArrayParttern)//再次创建正则以备替换 var j=0; var ArrayReplace=Formatparttern.replace(/#/g,function(){j++;return "$"+j})//创建正则替换时的第二个参数 for(var i=0;i<IntergerPushArray.length;i++) { IntergerPushArray[i]=IntergerPushArray[i].toString().replace(ArrayParttern,ArrayReplace)//替换 } var k=0; if(ifInterger)//如果整数返回数组逆序,并且通过连接字符连接每组数据,去掉多余的0;否则返回格式化后的小数部分 { return (IntergerPushArray.reverse().join(ConnectOption).replace(/(.)/g,function($1){if(/\d/.test($1)){k++;}return((k<=parseInt(deleteNum))?"":$1)})) } else { return(IntergerPushArray.join(ConnectOption)) } } } var a="12324536789.1243211";//在这里修改要格式化的字符串 var b="20050908" var c="20050908091500" alert(a.HBformatNumber("###.###",","))//可以按各种需要进行格式化,比如格式化3位一组 alert(a.HBformatNumber("###",","))//只格式化整数部分,3位一组 alert(b.HBformatNumber("####-##-##",""))//时间字符串也支持,可以把input的maxlength属性设为相应格式的最大长度,这样就不会出现两组了,不过没有判断是否为时间对象 alert(c.HBformatNumber("####-##-## ##:##:##",""))//加时分秒也可以 alert(a.HBformatNumber("###,##.#-##"," "))//大部分特殊格式也支持</script> 1、既然作为String对象的方法定义,那么就应该支持任意字符串,而不是只针对数字字符串a = 20050908091500.HBformatNumber("####-##-## ##:##:##","");2、处理方法过于复杂,代码几乎让人看不清3、其实不用想的太复杂。既然使用#做为占位标志,那么只需在处理时补齐格式串较数字串不足的长度比如格式串 ###,###数字串 12345678则调整格式串为 ##,###,###然后将转换成字符串的数字串按字节逐次替换进去就可以了f = '##,###,###';n = '12345678';for(i=0; i<n.length; i++) f = f.replace(/#/, n.substr(i, 1)); 同理f = "####-##-## ##:##:##";n = "20050908091500";for(i=0; i<n.length; i++) f = f.replace(/#/, n.substr(i, 1));得 2005-09-08 09:15:00一点建议,仅供参考 的确是上面的代码好一点,我的代码替换的正则和替换后的字符串格式都是动态生成的,显然效率应该比上面的要差,我把代码又改了下,在加上被格式的字符串长于要格式的格式时的一些代码。现在可以格式化字符串了<script language=javascript>/*参数1:以#表示数字或字符,可加入一个小数点,两个小数点就会出错,格式化后的样式参数2:每组格式之间的连接符*/String.prototype.HBformatNumber=function(FormatParttern,ConnectOption){ if(!/#/.test(FormatParttern))//判断格式是不是可以进行格式化 { return "格式错误"; } var FormatPartternArray=FormatParttern.split("\.");//分开小数部分和整数部分的格式 return splitNUM(this) function splitNUM(num)//此函数进行分开数字 { NumArray=num.split("\.") if(NumArray.length==1) { return formatNUM(NumArray[0],FormatPartternArray[0],true) } else { if(FormatPartternArray.length==1) { return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+NumArray[1] } else { return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+formatNUM(NumArray[1],FormatPartternArray[1],false) } } } /* 格式化字符串函数 参数1:待格式化的字符串 参数2:格式化样式 参数3:是否为整数格式化,true为整数格式化,false为小数,字符串也为true */ function formatNUM(num,Formatparttern,ifInterger) { var IntergerPushArray=new Array();//定义一个数组栈来存放整数 var IntergerFormatPartternNum=Formatparttern.match(/\#/g).length//得到一组格式化样式中包含多少个数字/ var IntegerParttern=(ifInterger)?(new RegExp(Formatparttern.replace(/[^#]/g,"").replace(/#/g,".")+"$")):new RegExp("^"+Formatparttern.replace(/[^#]/g,"").replace(/#/g,"."))//创建正则为了把每组数字取出来 while(IntegerParttern.test(num)) { IntergerPushArray.push(num.match(IntegerParttern))//把每一组放到数组中 num=num.replace(IntegerParttern,"");//去掉这组,去拿下一组 } if(num!="") { var RemainNum=num.length//剩下不够一组数字的时候判断还有几个数字 var deleteNum=IntergerFormatPartternNum-RemainNum//一会需要去掉的数字个数 for(var i=0;i<IntergerFormatPartternNum;i++)//把最后一组不够的位数加0填充 { num=(ifInterger)?("0"+num):(num+"0") } num=(ifInterger)?num.substr((num.length-parseInt(IntergerFormatPartternNum))):num.substr(0,IntergerFormatPartternNum)//得到最后一个格式化后的函数 IntergerPushArray.push(num);//将最后一组进栈 } for(var i=0;i<IntergerPushArray.length;i++) { var j=-1; var str=IntergerPushArray[i].toString(); IntergerPushArray[i]=Formatparttern.replace(/(#)/g,function($1){j++;return str.substr(j,1)})//替换 } if(ifInterger)//如果整数返回数组逆序,并且通过连接字符连接每组数据,去掉多余的0;否则返回格式化后的小数部分 { return (IntergerPushArray.reverse().join(ConnectOption).substr(parseInt(deleteNum))) } else { return(IntergerPushArray.join(ConnectOption)) } }}var a="12324536789.1243211";//在这里修改要格式化的字符串var b="20050908"var c="20050908091500"var d="abcssfasdfsdfsdf"alert(a.HBformatNumber("###.###",","))//可以按各种需要进行格式化,比如格式化3位一组alert(a.HBformatNumber("###",","))//只格式化整数部分,3位一组alert(b.HBformatNumber("####-##-##",""))//时间字符串也支持,可以把input的maxlength属性设为相应格式的最大长度,这样就不会出现两组了,不过没有判断是否为时间对象alert(c.HBformatNumber("####-##-## ##:##:##",""))//可以加时分秒alert(a.HBformatNumber("###,##.#-##"," "))//支持大部分特殊格式alert(d.HBformatNumber("###",","))//支持大部分字符串</script> js选择checkbox问题!! 转:JavaScript 框架比较 如何给表格中的某一列进行排序? ext API中缺少属性 {aa: '1', bb : '2'} 这叫什么?如何获取值? 现在在Javascript中有两个方法function1,function2,我想循环调用这两个方法,如何办呀?? sw47(我爱编程,脑筋好好,嗷嗷嗷嗷嗷...)接分 给点参考吧! 不知道如何把定值px修改为百分比 请大神推荐js插件画网络拓扑图,可以传输json数据 定义了一个数组,特殊符号出错 使用MSXML2.DOMDocument.3.0 需要安装哪个开发包?
---
斑竹牛人呀
有道理,我改动了下,但是现在还是不是太好,因为不能满足设置"###,##"这种格式,我想 可以设置一个数组堆栈,来实现这个,从最后开始匹配,匹配到了就进栈,晚上我整理下。
to DeluxWorld(曾经的你) 谢谢to sanshisong(三师兄) 我争取以后成为牛人to youbl(wolf) 是,接受,加了些注释
<script language=javascript>
/*
数字格式化函数
总体思路,首先把数字分成整数和小数两部分,
把整数部分逆序之后在通过计数器添加分割字符
小数部分少了逆序部分
*/
String.prototype.HBformatNumber=function(FormatPartternNum,FormatParttern)
{
function formatNUM(num)
{
jishuNum=-1;//初始化一个计数器
NumArray=num.split("\.")
str1=NumArray[0].split("").reverse().join("").replace(/\d/g,function($1){jishuNum++;return((jishuNum%FormatPartternNum==0)&&(jishuNum!=0))?FormatParttern+$1:$1}).split("").reverse().join("")
jishuNum=-1;//重新初始化计数器用于小数部分
return (NumArray.length==1)?str1:(str1+"."+(NumArray[1].replace(/\d/g,function($1){jishuNum++;return((jishuNum%FormatPartternNum==0)&&(jishuNum!=0))?FormatParttern+$1:$1})))
}
return (/^(([1-9]\d*)|(0))(\.\d*)?$/.test(this))?formatNUM(this):"不是数字格式"//判断格式是否符合数字
}
var a="12324536789.1243211";//在这里修改要格式化的字符串
alert(a.HBformatNumber(4,"-"))//参数1为输入几个数字一隔,参数2为中间间隔的符号
</script>
我改了下,现在支持自定义数字格式化了,大家继续提啊<script language=javascript>
/*
参数1:以#表示数字,可加入小数点,格式化后的样式
参数2:每组格式之间的连接符
*/
String.prototype.HBformatNumber=function(FormatParttern,ConnectOption)
{
if(!/#/.test(FormatParttern))//判断格式是不是可以进行格式化
{
return "格式错误";
}
var FormatPartternArray=FormatParttern.split("\.");//分开小数部分和整数部分的格式
function splitNUM(num)//此函数进行分开数字
{
NumArray=num.split("\.")
if(NumArray.length==1)
{
return formatNUM(NumArray[0],FormatPartternArray[0],true)
}
else
{
if(FormatPartternArray.length==1)
{
return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+NumArray[1]
}
else
{
return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+formatNUM(NumArray[1],FormatPartternArray[1],false)
}
}
}
return (/^(([1-9]\d*)|(0))(\.\d*)?$/.test(this))?splitNUM(this):"不是数字格式"//判断格式是否符合数字
/*
格式化数字函数
参数1:待格式化的数字
参数2:格式化样式
参数3:是否为整数格式化,true为整数格式化,false为小数
*/
function formatNUM(num,Formatparttern,ifInterger)
{
var IntergerPushArray=new Array();//定义一个数组栈来存放整数
var IntergerFormatPartternNum=Formatparttern.match(/\#/g).length //得到一组格式化样式中包含多少个数字/
var IntegerParttern=(ifInterger)?(new RegExp(Formatparttern.replace(/[^#]/g,"").replace(/#/g,"\\d")+"$")):new RegExp("^"+Formatparttern.replace(/[^#]/g,"").replace(/#/g,"\\d"))//创建正则为了把每组数字取出来
while(IntegerParttern.test(num))
{
IntergerPushArray.push(num.match(IntegerParttern))//把每一组放到数组中
num=num.replace(IntegerParttern,"");//去掉这组,去拿下一组
}
if(num!="")
{
var RemainNum=num.match(/\d/g).length//剩下不够一组数字的时候判断还有几个数字
var deleteNum=IntergerFormatPartternNum-RemainNum//一会需要去掉的数字个数
for(var i=0;i<IntergerFormatPartternNum;i++)//把最后一组不够的位数加0填充
{
num=(ifInterger)?("0"+num):(num+"0")
}
num=(ifInterger)?num.substr((num.length-parseInt(IntergerFormatPartternNum))):num.substr(0,IntergerFormatPartternNum)//得到最后一个格式化后的函数
IntergerPushArray.push(num);//将最后一组进栈
}
var StrArrayParttern=""
for(var i=0;i<IntergerFormatPartternNum;i++)
{
StrArrayParttern=StrArrayParttern+"(\\d)"
}
var ArrayParttern=new RegExp(StrArrayParttern)//再次创建正则以备替换
var j=0;
var ArrayReplace=Formatparttern.replace(/#/g,function(){j++;return "$"+j})//创建正则替换时的第二个参数
for(var i=0;i<IntergerPushArray.length;i++)
{
IntergerPushArray[i]=IntergerPushArray[i].toString().replace(ArrayParttern,ArrayReplace)//替换
}
var k=0;
if(ifInterger)//如果整数返回数组逆序,并且通过连接字符连接每组数据,去掉多余的0;否则返回格式化后的小数部分
{
return (IntergerPushArray.reverse().join(ConnectOption).replace(/(.)/g,function($1){if(/\d/.test($1)){k++;}return((k<=parseInt(deleteNum))?"":$1)}))
}
else
{
return(IntergerPushArray.join(ConnectOption))
}
}
}
var a="12324536789.1243211";//在这里修改要格式化的字符串
var b="20050908"
var c="20050908091500"
alert(a.HBformatNumber("###.###",","))//可以按各种需要进行格式化,比如格式化3位一组
alert(a.HBformatNumber("###",","))//只格式化整数部分,3位一组
alert(b.HBformatNumber("####-##-##",""))//时间字符串也支持,可以把input的maxlength属性设为相应格式的最大长度,这样就不会出现两组了,不过没有判断是否为时间对象
alert(c.HBformatNumber("####-##-## ##:##:##",""))//加时分秒也可以
alert(a.HBformatNumber("###,##.#-##"," "))//大部分特殊格式也支持
</script>
a = 20050908091500.HBformatNumber("####-##-## ##:##:##","");2、处理方法过于复杂,代码几乎让人看不清3、其实不用想的太复杂。
既然使用#做为占位标志,那么只需在处理时补齐格式串较数字串不足的长度
比如
格式串 ###,###
数字串 12345678
则调整格式串为 ##,###,###
然后将转换成字符串的数字串按字节逐次替换进去就可以了
f = '##,###,###';
n = '12345678';
for(i=0; i<n.length; i++)
f = f.replace(/#/, n.substr(i, 1));
f = "####-##-## ##:##:##";
n = "20050908091500";
for(i=0; i<n.length; i++)
f = f.replace(/#/, n.substr(i, 1));得 2005-09-08 09:15:00一点建议,仅供参考
<script language=javascript>
/*
参数1:以#表示数字或字符,可加入一个小数点,两个小数点就会出错,格式化后的样式
参数2:每组格式之间的连接符
*/
String.prototype.HBformatNumber=function(FormatParttern,ConnectOption)
{
if(!/#/.test(FormatParttern))//判断格式是不是可以进行格式化
{
return "格式错误";
}
var FormatPartternArray=FormatParttern.split("\.");//分开小数部分和整数部分的格式
return splitNUM(this)
function splitNUM(num)//此函数进行分开数字
{
NumArray=num.split("\.")
if(NumArray.length==1)
{
return formatNUM(NumArray[0],FormatPartternArray[0],true)
}
else
{
if(FormatPartternArray.length==1)
{
return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+NumArray[1]
}
else
{
return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+formatNUM(NumArray[1],FormatPartternArray[1],false)
}
}
}
/*
格式化字符串函数
参数1:待格式化的字符串
参数2:格式化样式
参数3:是否为整数格式化,true为整数格式化,false为小数,字符串也为true
*/
function formatNUM(num,Formatparttern,ifInterger)
{
var IntergerPushArray=new Array();//定义一个数组栈来存放整数
var IntergerFormatPartternNum=Formatparttern.match(/\#/g).length//得到一组格式化样式中包含多少个数字/
var IntegerParttern=(ifInterger)?(new RegExp(Formatparttern.replace(/[^#]/g,"").replace(/#/g,".")+"$")):new RegExp("^"+Formatparttern.replace(/[^#]/g,"").replace(/#/g,"."))//创建正则为了把每组数字取出来
while(IntegerParttern.test(num))
{
IntergerPushArray.push(num.match(IntegerParttern))//把每一组放到数组中
num=num.replace(IntegerParttern,"");//去掉这组,去拿下一组
}
if(num!="")
{
var RemainNum=num.length//剩下不够一组数字的时候判断还有几个数字
var deleteNum=IntergerFormatPartternNum-RemainNum//一会需要去掉的数字个数
for(var i=0;i<IntergerFormatPartternNum;i++)//把最后一组不够的位数加0填充
{
num=(ifInterger)?("0"+num):(num+"0")
}
num=(ifInterger)?num.substr((num.length-parseInt(IntergerFormatPartternNum))):num.substr(0,IntergerFormatPartternNum)//得到最后一个格式化后的函数
IntergerPushArray.push(num);//将最后一组进栈
}
for(var i=0;i<IntergerPushArray.length;i++)
{
var j=-1;
var str=IntergerPushArray[i].toString();
IntergerPushArray[i]=Formatparttern.replace(/(#)/g,function($1){j++;return str.substr(j,1)})//替换
}
if(ifInterger)//如果整数返回数组逆序,并且通过连接字符连接每组数据,去掉多余的0;否则返回格式化后的小数部分
{
return (IntergerPushArray.reverse().join(ConnectOption).substr(parseInt(deleteNum)))
}
else
{
return(IntergerPushArray.join(ConnectOption))
}
}
}
var a="12324536789.1243211";//在这里修改要格式化的字符串
var b="20050908"
var c="20050908091500"
var d="abcssfasdfsdfsdf"
alert(a.HBformatNumber("###.###",","))//可以按各种需要进行格式化,比如格式化3位一组
alert(a.HBformatNumber("###",","))//只格式化整数部分,3位一组
alert(b.HBformatNumber("####-##-##",""))//时间字符串也支持,可以把input的maxlength属性设为相应格式的最大长度,这样就不会出现两组了,不过没有判断是否为时间对象
alert(c.HBformatNumber("####-##-## ##:##:##",""))//可以加时分秒
alert(a.HBformatNumber("###,##.#-##"," "))//支持大部分特殊格式
alert(d.HBformatNumber("###",","))//支持大部分字符串
</script>