我有一个字符串
var str = "か22222";
我想像这样搜索
str.indexOf( “か2”);其中“か2”都是多字节字符,“str”只有“か”作为多字节
但我仍然应该将indexOf的结果设为0。
有没有办法做到这一点是JS ??
答案 0 :(得分:2)
没有。无论出于何种可怕的历史原因,角色2
(U + 32,DIGIT TWO)和角色2
(U + FF12,FULLWIDTH DIGIT TWO)都是两个完全不同的东西 - 搜索一个将与另一个不匹配。
答案 1 :(得分:0)
嗯,最简单的事情就是
var result=str.match(/か[22]/);
alert("match at "+result.index);
您还可以使用[1-9]之类的字符作为字符范围,因为全宽数字占用了连续的代码点。
更通用的解决方案是在“多字节”(更好地称为“全宽”)和某些点上的单宽字符之间进行转换。稍微hacky转换是将0xfee0添加到相应的半宽代码点。假设您要将输入字符串转换为全角形式;你可以这样做:
var arr=[];
for(var i;i<str.length;i++){
arr[i] = str.charPointAt(i);
i(arr[i]>=0x30 && arr[i]<=0x39) { arr[i] += 0xfee0; }
}
var full_width_string=String.fromCharCode.apply(null,arr);
现在您可以搜索全角字符串。
最好为Javascript使用Unicode库或规范化器。