ActionScript字符串工具
package com.xlands.utils { import flash.utils.ByteArray; /** *字符串工具 * */ public class StringUtil { //忽略大小字母比较字符是否相等; public static function equalsIgnoreCase(char1:String, char2:String):Boolean { return char1.toLowerCase() == char2.toLowerCase(); } //比较字符是否相等; public static function equals(char1:String, char2:String):Boolean { return char1 == char2; } //是否为Email地址; public static function isEmail(char:String):Boolean { if (char == null) { return false; } char=trim(char); var pattern:RegExp=/(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //是否是数值字符串; public static function isNumber(char:String):Boolean { if (char == null) { return false; } return !isNaN(parseInt(char)) } //是否为Double型数据; public static function isDouble(char:String):Boolean { char=trim(char); var pattern:RegExp=/^[-\+]?\d+(\.\d+)?$/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //Integer; public static function isInteger(char:String):Boolean { if (char == null) { return false; } char=trim(char); var pattern:RegExp=/^[-\+]?\d+$/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //English; public static function isEnglish(char:String):Boolean { if (char == null) { return false; } char=trim(char); var pattern:RegExp=/^[A-Za-z]+$/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //中文; public static function isChinese(char:String):Boolean { if (char == null) { return false; } char=trim(char); var pattern:RegExp=/^[\u0391-\uFFE5]+$/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //双字节 public static function isDoubleChar(char:String):Boolean { if (char == null) { return false; } char=trim(char); var pattern:RegExp=/^[^\x00-\xff]+$/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //含有中文字符 public static function hasChineseChar(char:String):Boolean { if (char == null) { return false; } char=trim(char); var pattern:RegExp=/[^\x00-\xff]/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //注册字符; public static function hasAccountChar(char:String, len:uint=15):Boolean { if (char == null) { return false; } if (len < 10) { len=15; } char=trim(char); var pattern:RegExp=new RegExp("^[a-zA-Z0-9][a-zA-Z0-9_-]{0," + len + "}$", ""); var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } //URL地址; public static function isURL(char:String):Boolean { if (char == null) { return false; } char=trim(char).toLowerCase(); var pattern:RegExp=/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/; var result:Object=pattern.exec(char); if (result == null) { return false; } return true; } // 是否为空白; public static function isWhitespace(char:String):Boolean { switch(char) { case " ": case "\t": case "\r": case "\n": case "\f": return true; default: return false; } } //去左右空格; public static function trim(char:String):String { if (char == null) { return null; } return rtrim(ltrim(char)); } //去左空格; public static function ltrim(char:String):String { if (char == null) { return null; } var pattern:RegExp=/^\s*/; return char.replace(pattern, ""); } //去右空格; public static function rtrim(char:String):String { if (char == null) { return null; } var pattern:RegExp=/\s*$/; return char.replace(pattern, ""); } //是否为前缀字符串; public static function beginsWith(char:String, prefix:String):Boolean { return (prefix == char.substring(0, prefix.length)); } //是否为后缀字符串; public static function endsWith(char:String, suffix:String):Boolean { return (suffix == char.substring(char.length - suffix.length)); } //去除指定字符串; public static function remove(char:String, remove:String):String { return replace(char, remove, ""); } //字符串替换; public static function replace(char:String, replace:String, replaceWith:String):String { return char.split(replace).join(replaceWith); } //utf16转utf8编码; public static function utf16to8(char:String):String { var out:Array=new Array(); var len:uint=char.length; for(var i:uint=0; i < len; i++) { var c:int=char.charCodeAt(i); if (c >= 0x0001 && c <= 0x007F) { out[i]=char.charAt(i); } else if (c > 0x07FF) { out[i]=String.fromCharCode(0xE0 | ((c >> 12) & 0x0F), 0x80 | ((c >> 6) & 0x3F), 0x80 | ((c >> 0) & 0x3F)); } else { out[i]=String.fromCharCode(0xC0 | ((c >> 6) & 0x1F), 0x80 | ((c >> 0) & 0x3F)); } } return out.join(''); } //utf8转utf16编码; public static function utf8to16(char:String):String { var out:Array=new Array(); var len:uint=char.length; var i:uint=0; while(i < len) { var c:int=char.charCodeAt(i++); switch(c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out[out.length]=char.charAt(i - 1); break; case 12: case 13: // 110x xxxx 10xx xxxx var char2:int=char.charCodeAt(i++); out[out.length]=String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx var char3:int=char.charCodeAt(i++); var char4:int=char.charCodeAt(i++); out[out.length]=String.fromCharCode(((c & 0x0F) << 12) | ((char3 & 0x3F) << 6) | ((char4 & 0x3F) << 0)); break; } } return out.join(''); } public static function autoReturn(str:String, c:int):String { var l:int=str.length; if (l < 0) return ""; var i:int=c; var r:String=str.substr(0, i); while(i <= l) { r+="\n"; r+=str.substr(i, c); i+=c; } return r; } public static function limitStringLengthByByteCount(str:String, bc:int, strExt:String="..."):String { if (str == null || str == "") { return str; } else { var l:int=str.length; var c:int=0; var r:String=""; for(var i:int=0; i < l; ++i) { var code:uint=str.charCodeAt(i); if (code > 0xffffff) { c+=4; } else if (code > 0xffff) { c+=3; } else if (code > 0xff) { c+=2; } else { ++c; } if (c < bc) { r+=str.charAt(i); } else if (c == bc) { r+=str.charAt(i); r+=strExt; break; } else { r+=strExt; break; } } return r; } } public static function getCharsArray(targetString:String, hasBlankSpace:Boolean):Array { var tempString:String=targetString; if (hasBlankSpace == false) { tempString=trim(targetString); } return tempString.split(""); } private static var CHINESE_MAX:Number = 0x9FFF; private static var CHINESE_MIN:Number = 0x4E00; private static var LOWER_MAX:Number = 0x007A; private static var LOWER_MIN:Number = 0x0061; private static var NUMBER_MAX:Number = 0x0039; private static var NUMBER_MIN:Number = 0x0030; private static var UPPER_MAX:Number = 0x005A; private static var UPPER_MIN:Number = 0x0041; /** * 返回一段字符串的字节长度(汉字一个字占2,其他占1) */ public static function getStringBytes(str:String):int { return getStrActualLen(str); /* var n:int=0; var l:int=str.length; for(var i:int=0; i < l; ++i) { var code:Number=str.charCodeAt(i); if (code >= CHINESE_MIN && code <= CHINESE_MAX) { n+=2; } else { ++n; } } return n;*/ } /** * 按字节长度截取字符串(汉字一个字占2,其他占1) */ public static function substrByByteLen(str:String, len:int):String { if (str == "" || str == null) return str; var n:int=0; var l:int=str.length; for(var i:int=0; i < l; ++i) { var char:String=str.charAt(i); n += getStrActualLen(char); if (n > len) { str=str.substr(0, i - 1); break; } } return str; } /** * 返回一段字符串的字节长度 */ /* public static function getStringByteLength(str:String):int { if (str == null) return 0; var t:ByteArray=new ByteArray(); t.writeUTFBytes(str); return t.length; }*/ public static function getStrActualLen(sChars:String) : int { if (sChars == "" || sChars == null) return 0; else return sChars.replace(/[^\x00-\xff]/g,"xx").length; } public static function isEmptyString(str:String):Boolean { return str == null || str == ""; } private static var NEW_LINE_REPLACER:String=String.fromCharCode(6); public static function isNewlineOrEnter(code:uint):Boolean { return code == 13 || code == 10; } public static function removeNewlineOrEnter(str:String):String { str=replace(str, "\n", ""); return replace(str, "\r", ""); } /** * 替换掉文本中的 '\n' 为 '\7' */ public static function escapeNewline(txt:String):String { return replace(txt, "\n", NEW_LINE_REPLACER); } /** * 替换掉文本中的 '\7' 为 '\n' */ public static function unescapeNewline(txt:String):String { return replace(txt, NEW_LINE_REPLACER, "\n"); } /** * 判断哪些是全角字符,如果不含有返回空 */ public static function judge(s:String):String { var temps:String=""; var isContainQj:Boolean=false; for(var i:Number=0; i < s.length; i++) { //半角长度是一,特殊符号长度是三,汉字和全角长度是9 if (escape(s.substring(i, i + 1)).length > 3) { temps+="'" + s.substring(i, i + 1) + "' "; isContainQj=true; } } if (isContainQj) { temps; } return temps; } /** * 汉字、全角数字和全角字母都是双字节码,第一个字节的值减去160表示该字在字库中的区 码,第二个字节的值减去160为位码,如‘啊’的16进制编码为B0 A1,换算成十进制数就是 176和161,分别减去160后就是16和1,即‘啊’字的区位码是1601,同样数字和字母的区位 码也是如此,如‘0’是0316,‘1’是0317等,因此判断汉字及全角字符基本上只要看其连 续的两个字节是否大于160,至于半角字符和数字则更简单了,只要到ASCII码表中查一查就 知道了。 * //删除oldstr空格,把全角转换成半角 //根据汉字字符编码规则:连续两个字节都大于160, //全角符号第一字节大部分为163 //~,全角空格第一字节都是161,不知道怎么区分? * / /** * 把含有的全角字符转成半角 */ public static function changeToBj(s:String):String { if (s == null) return null; var temps:String=""; for(var i:Number=0; i < s.length; i++) { if (escape(s.substring(i, i + 1)).length > 3) { var temp:String=s.substring(i, i + 1); if (temp.charCodeAt(0) > 60000) { //区别汉字 var code:Number=temp.charCodeAt(0) - 65248; var newt:String=String.fromCharCode(code); temps+=newt; } else { if (temp.charCodeAt(0) == 12288) temps+=" "; else temps+=s.substring(i, i + 1); } } else { temps+=s.substring(i, i + 1); } } return temps; } /** * 把含有的半角字符转成全角 */ public static function changeToQj(s:String):String { if (s == null) return null; var temps:String=""; for(var i:Number=0; i < s.length; i++) { if (escape(s.substring(i, i + 1)).length > 3) { var temp:String=s.substring(i, i + 1); if (temp.charCodeAt(0) > 60000) { //区别汉字 var code:Number=temp.charCodeAt(0) + 65248; var newt:String=String.fromCharCode(code); temps+=newt; } else { temps+=s.substring(i, i + 1); } } else { temps+=s.substring(i, i + 1); } } return temps; } /** * 在不够指定长度的字符串前补零 * @param str * @param len * @return * */ public static function renewZero(str:String, len:int):String { var bul:String=""; var strLen:int=str.length; if (strLen < len) { for(var i:int=0; i < len - strLen; i++) { bul+="0"; } return bul + str; } else { return str; } } /** * 检查字符串是否符合正则表达式 */ public static function isUpToRegExp(str:String, reg:RegExp):Boolean { if (str != null && reg != null) { return str.match(reg) != null; } else return false; } /** * 是否含有/0结束符的不正常格式的字符串 */ public static function isErrorFormatString(str:String, len:int=0):Boolean { if (str == null || (len != 0 && str.length > len)) return true; else return str.indexOf(String.fromCharCode(0)) != -1; } /** * 返回格式化后的金钱字符串,如1000000 -> 1,000,000 */ public static function getFormatMoney(money:Number):String { var moneyStr:String=money.toString(); var formatMoney:Array=new Array(); for(var index:Number=-1; moneyStr.charAt(moneyStr.length + index) != ""; index-=3) { if (Math.abs(index - 2) >= moneyStr.length) formatMoney.push(moneyStr.substr(0, moneyStr.length + index + 1)); else formatMoney.push(moneyStr.substr(index - 2, 3)); } formatMoney.reverse(); return formatMoney.join(","); } /** * 正整数转为中文数字 * 最大到十位 */ private static const ChineseNumberTable:Array = [0x96f6 ,0x4e00 ,0x4e8c ,0x4e09 ,0x56db ,0x4e94 ,0x516d ,0x4e03 ,0x516b ,0x4e5d ,0x5341]; public static function uintToChineseNumber(u:uint):String { if (u <= 10) { return String.fromCharCode(ChineseNumberTable[u]); } else if (u < 20) { return String.fromCharCode(ChineseNumberTable[10], ChineseNumberTable[u - 10]); } else if (u < 100) { var t:uint = Math.floor(u / 10); var tt:uint = u % 10; if (tt > 0) { return String.fromCharCode(ChineseNumberTable[t], ChineseNumberTable[10], ChineseNumberTable[tt]); } else { return String.fromCharCode(ChineseNumberTable[t], ChineseNumberTable[10]); } } else { return ""; } } /** * 仿照C# 的 String.Format {n} * @param strFormat Format-control string * @param args * @return * */ public static function format(strFormat:String, ...additionalArgs):String { var args:Array = additionalArgs; var reg:RegExp = /\{(\d+)\}/g; return strFormat.replace(reg, function(strResult:String, strMatch:String, pos:int, strSource:String):String { return args[strMatch]; }); } public static const LV1_Split:String = ","; public static const LV2_Split:String = ":"; /** * * @param str 需要分析的字符串 * @param fnOnSplit 分析回调函数 fnOnSplit(str:String):void * */ public static function lv1ParseString(str:String, fnOnSplit:Function):Boolean { if (str == null || str == "") { return false; } var r:Boolean = false; for each (var t:String in str.split(LV1_Split)) { fnOnSplit(t); r = true; } return r; } /** * * @param str 需要分析的字符串 * @param fnOnSplit 分析回调函数 fnOnSplit(strSplits:Array<String>):void * */ public static function lv2ParseString(str:String, fnOnSplit:Function):Boolean { if (str == null || str == "") { return false; } var r:Boolean = false; for each (var t:String in str.split(LV2_Split)) { if (t != null && t == "") { var a:Array = str.split(LV1_Split); if (a.length > 1) { fnOnSplit(a); r = true; } else { //return; } } } return r; } /** * * @param infos 信息数组 * @param fnGetInfoString fnGetInfoString(info:Object):String * @return * */ public static function getLv1SplitString(infos:Array/*<Object>*/, fnGetInfoString:Function):String { if (infos == null || infos.length == 0) { return ""; } var l:int = infos.length; var r:String = fnGetInfoString(infos[0]); var i:int = 1; while (i < l) { r += LV1_Split; r += fnGetInfoString(infos[i]); ++i; } return r; } /** * * @param infos 信息数组 * @param fnGetInfoString fnGetInfoString(info:Object, strLv2Sep:String):String * @return * */ public static function getLv2SplitString(infos:Array/*<Object>*/, fnGetInfoString:Function):String { if (infos == null || infos.length == 0) { return ""; } var l:int = infos.length; var r:String = fnGetInfoString(infos[0], LV2_Split); var i:int = 1; while (i < l) { r += LV1_Split; r += fnGetInfoString(infos[i], LV2_Split); ++i; } return r; } public function StringUtil() { throw new Error("StringUtil class is static container only"); } } }