马上加入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
 
  复制代码 
 
 
 
 |