如何比较字符相似但字符代码不同的字符串
How to compare strings in which appears similar characters but different char codes?
我有一个问题,比较字符串与不同的字符代码,但类似的字符,如以下:
console.log('³' === '3') // false;
由于不同的字符代码,上面代码中的False值:
console.log('³'.charCodeAt(0)) // 179
console.log('3'.charCodeAt(0)) // 51
将值转换为相等的通用解决方案是什么?我需要它,因为我需要比较1,2,3,4,5....
谢谢
查看ASCII折叠,它主要用于将重音字符转换为非重音字符。这里有一个JS库。
对于您提供的示例,它将工作-对于其他示例,它可能不工作。这取决于等效性是如何定义的(除了你自己,没人知道你所说的"相似"是什么意思——不同的字符就是不同的字符)。
如果你已经知道你想要映射的所有字符,最简单的方法就是自己定义一个映射:
var eqls = function(first, second) {
var mappings = { '³': '3', '3': '3' };
if (mappings[first]) {
return mappings[first] == mappings[second];
}
return false;
}
if (eqls('³', '3')) { ... }
没有"通用解决方案"
如果你只处理数字,你可以建立你的"等价表",为每个支持的字符定义一个"规范"字符。
例如var eqTable = []; // the table is just an array
eqTable[179] = 51; // ³ --> 3
/* ... */
然后构建一个简单的算法将字符串转换为规范形式
var original, // the source string - let's assume original=="³3"
var canonical = ""; // the canonical resulting string
var i,
n,
c;
n = original.length;
for( i = 0; i < n; i++ )
{
c = eqTable[ original.charCodeAt( i ) ];
if( typeof( c ) != 'undefined' )
{
canonical += String.fromCharCode( c );
}
else
{
canonical += original[ i ]; // you *may* leave the original character if no match is found
}
}
// RESULT: canonical == "33"
相关文章:
- Javascript键代码捕获非拉丁字符?(还需要在selectize.js中工作)
- 如何逃离“;jQuery代码中的“[”字符
- 代码点火器:搜索自动完成 JSON 解析意外字符
- 用于检查特殊字符的 JavaScript 代码
- 不允许的关键字符.通过 Codeigniter 中的 jQuery 在帧中加载嵌入代码时出错
- 用js更改字符代码并显示新字符
- 此页面上的脚本中发生错误 第 0 行 字符 0 代码 0
- Javascript:非 unicode 字符代码到 unicode 字符
- 如果使用 SHIFT 如何获取字符代码
- IE7 脚本错误行 0 字符 0 代码 0 jquery 1.10.1
- Javascript事件按键检查字符代码
- javascript中字符代码128以上的二进制字符串出现问题
- 按键无响应字符代码
- Javascript/jQuery:如何将字符串转换为HTML字符代码
- 如何在JavaScript中将字符代码数组转换为字符串
- 如何比较字符相似但字符代码不同的字符串
- 转换特殊的HTML字符代码,如"到正常的字符
- 什么是字符代码♥和如何使用它
- 试图将HTML字符代码写入页面的Javascript
- 每次在文本字段上调用.val()时,从该文本字段的值中删除特定字符(代码应该在jq插件中)