马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 贪吃蛇 于 2014-2-19 01:39 编辑
学习了Rainshine的函数isnum(&text,space=true,mode=1),自己也写了个,欢迎大大们指点。- function isnum(&text,mode=-1)
- //功能:判断某段字符串是否为数字,返回真-1或假0.
- //参数:&text,字符串,可返回处理后的数值;mode,整型,具体含义如下:
- //mode=-1:text不作处理;
- //mode=0:text含有"空格、回车、换行、+、-、."之外的字符时返回原值,否则返回删除所有字符后的连起来的数(全数字).
- //mode=1:text含有"空格、回车、换行、+、-、."之外的字符时返回原值,否则text允许保留第一个小数点的数字.
- //mode=2:text含有"空格、回车、换行、+、-、."之外的字符时返回原值,否则text允许保留首位正负号及第一个小数点的数字.
- //mode=3:text含有"空格、回车、换行、+、-、."之外的字符时返回原值,否则text="空格、回车、换行"之前的数,且只包含数字.
- //mode=4:text含有"空格、回车、换行、+、-、."之外的字符时返回原值,否则temp="空格、回车、换行"之前的数,且数字之外只允许第1个出现的小数点.
- //mode=5:text含有"空格、回车、换行、+、-、."之外的字符时返回原值,否则temp="空格、回车、换行"之前的数,且数字之外只允许第1个出现的小数点和首位正负号.
- //示例:text="-1.2.+3 4 5",isnum(text)的返回值为0(该例返回值都为0),text不变; isnum(text,0)时text="12345";isnum(text,1)时text=1.2345;
- //isnum(text,2)时text=-1.2345;isnum(text,3)时text=123;isnum(text,4)时text=1.23;isnum(text,5)时text=-1.23;
- textTmp=text,temp=""
- textTmp=str.strtrim(textTmp,"\r\n")
- length=str.strleng(textTmp)
- ascii=0,dot=0,n=0
- for(i=0;i<length;i++)
- ascii=str.strgetat(textTmp,i)
- if(ascii>47&&ascii<58)
- temp=str.strcat(temp,str.format("%c",ascii))
- continue
- endif
- if(ascii!=10 && ascii!=13 && ascii!=32 && ascii!=43 && ascii!=45 && ascii!=46)//10换行 13回车 32空格 43+ 45- 46.
- return false
- endif
- n++
- select(mode)
- case -1://temp为原值
- return false
- case 0://temp全是数字
- case 1://temp允许第1个出现的小数点
- if(ascii==46 && dot==0)
- temp=str.strcat(temp,str.format("%c",ascii))
- dot=1
- endif
- case 2://temp允许正负号和第1个出现的小数点
- if(ascii==46 && dot==0)
- temp=str.strcat(temp,str.format("%c",ascii))
- dot=1
- endif
- if(ascii==43&&i==0 || ascii==45&&i==0)
- temp=str.strcat(temp,str.format("%c",ascii))
- endif
- case 3://temp="空格、回车、换行"之前的数,且只包含数字
- if(ascii==10 || ascii==13 || ascii==32)
- break
- endif
- case 4://temp="空格、回车、换行"之前的数,且数字之外只允许第1个出现的小数点
- if(ascii==46 && dot==0)
- temp=str.strcat(temp,str.format("%c",ascii))
- dot=1
- endif
- if(ascii==10 || ascii==13 || ascii==32)
- break
- endif
- case 5://temp="空格、回车、换行"之前的数,且数字之外只允许第1个出现的小数点和正负号
- if(ascii==46 && dot==0)
- temp=str.strcat(temp,str.format("%c",ascii))
- dot=1
- endif
- if(ascii==43&&i==0 || ascii==45&&i==0)
- temp=str.strcat(temp,str.format("%c",ascii))
- endif
- if(ascii==10 || ascii==13 || ascii==32)
- break
- endif
- default:
- traceprint("isnum函数错误:参数2mode超出允许范围.")
- endselect
- endfor
- if(mode>-1)
- text=temp
- endif
- if(n>0)
- return false
- else
- return true
- endif
- endfunction
复制代码
|