0

我有一个字符串

var str = "か22222";

我想这样搜索

str.indexOf("か2"); 其中“か2”都是多字节字符,“str”只有“か”作为多字节

但我仍然应该得到 indexOf 的结果为 0。

有什么办法可以做到这一点是 JS 吗?

4

2 回答 2

1
于 2013-01-16T02:06:23.320 回答
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 库或规范器。

于 2013-01-16T02:25:30.343 回答