Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较出现相似字符但不同字符代码的字符串?_Javascript_String Comparison_Keycode - Fatal编程技术网

Javascript 如何比较出现相似字符但不同字符代码的字符串?

Javascript 如何比较出现相似字符但不同字符代码的字符串?,javascript,string-comparison,keycode,Javascript,String Comparison,Keycode,我无法比较具有不同字符代码但类似字符的字符串,如下所示: console.log('³' === '3') // false; 由于字符代码不同,上述代码的值为False: console.log('³'.charCodeAt(0)) // 179 console.log('3'.charCodeAt(0)) // 51 什么是将值转换为相等的通用解决方案?我需要它,因为我需要比较所有数字,如1,2,3,4,5…. 感谢您查看ASCII折叠,它主要用于将重音字符转换为非重音字符。它有一个JS

我无法比较具有不同字符代码但类似字符的字符串,如下所示:

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')) { ... }

查看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"
var-original,//源字符串-假设original==“3”
var canonical=”“;//标准化的结果字符串
var i,
N
C
n=原始长度;
对于(i=0;i
没有“通用解决方案”

如果您只需要处理数字,您可以建立“等价表”,其中为每个支持的字符定义一个“规范”字符

比如说

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"
var-original,//源字符串-假设original==“3”
var canonical=”“;//标准化的结果字符串
var i,
N
C
n=原始长度;
对于(i=0;i
您能给我们一个“相似字符”的明确定义吗?你只担心十位数的字符吗?JavaScript看不出它们是相似的,它只看到不同的字符代码…@Andrew L谢谢@Erik,在寻求帮助时不要挖苦人,这可能对你有好处。^那就创建一张地图。你能给我们一个“相似人物”的明确定义吗?你只担心十位数的字符吗?JavaScript看不出它们是相似的,它只看到不同的字符代码…@Andrew L谢谢@Erik,在寻求帮助时不要挖苦人,这对你也有好处。^那就创建一张地图。谢谢你的回答<代码>如果(eqls('³','3')!==false){…}
感谢您的回答<代码>如果(eqls('³','3')!==false){…}为什么不使用关联数组?比在一个普通数组中处理所有存在的东西更简单。当你解析一个字符串时,你不需要用一个关联数组来处理“存在的东西”吗?我的意思是:即使您使用关联数组,您也必须检查是否存在匹配项,并决定在未找到匹配项时如何操作。对不起,是的,您可以这样做,但它更简单、更灵活、不那么晦涩(例如,您可以使用字符串文字而不是ASCII码,因为您必须使用数组索引)。为什么不使用关联数组?比在一个普通数组中处理所有存在的东西更简单。当你解析一个字符串时,你不需要用一个关联数组来处理“存在的东西”吗?我的意思是:即使您使用关联数组,您也必须检查是否存在匹配项,并决定在未找到匹配项时如何操作。对不起,是的,您可以这样做,但它更简单、更灵活,而且不太模糊(例如,您可以使用字符串文字而不是ASCII码,因为您必须使用数组索引)。