string.replace(“é”,“e”)无效

时间:2013-11-15 14:39:11

标签: javascript string replace

我有一个应该“清理”字符串的函数,我想使用replace()来做这件事,但我无法弄清楚为什么当文本来自输入时下面的代码不起作用[文本]。

例如:

console.log(getCleanText("ééé")); // works fine, it displays : eee

// my_id is an input with type="text"
var my_text = document.getElementById("my_id").value 
console.log(getCleanText(my_text)); // doesn't work at all, it displays : ééé

功能代码是:

function getCleanText(some_text) {
    var clean_text = some_text.toLowerCase();
    clean_text = clean_text.replace("é", "e"); 
    clean_text = clean_text.split("é").join("e"); // give it another try

    return clean_text;
}

任何想法?

5 个答案:

答案 0 :(得分:3)

我愿意打赌你的问题在于对Unicode的误解。

é 
é

上面的两个字符是两个不同的字符。第一个是letter e,带有重音字符(U+0301)。另一个是单个字符U+00E9

您需要确保替换两个版本。

答案 1 :(得分:2)

我认为元素值中的字符“é”与“é”常量不同。要解决这个问题,您可以查看输入的int值。

var inputEValue = document.getElementById("my_id").charCodeAt(0);
var constantEValue = "é".charCodeAt(0);

然后您将能够检测到您要替换的字符。
如果您只想删除文字中的重音,请查看问题Remove accents/diacritics in a string in JavaScript

答案 2 :(得分:1)

试试这个:

function cleanText(text) {
    var re = new RegExp(/\u0301|\u00e9/g);

    return text.replace(re, "e").toLowerCase();
}

cleanText("éééé")

-

更新为使用Matt Grande提议的UniCode字符

答案 3 :(得分:1)

试试这个:

function getCleanText(old_string)
{
    var new_string = old_string.toLowerCase();
    return new_string.replace(/é/g, 'e');
}
爱德:被罗伯特殴打。有关参考,请参阅此处:What are useful JavaScript methods that extends built-in objects?

答案 4 :(得分:0)

输出是什么? var my_text = document.getElementById("my_id").value;? 根据您的html,您可能需要使用其他函数来获取数据。例如 var my_text = document.getElementById("my_id").innerHTML;

http://jsbin.com/obAmiPe/5/edit?html,js,console,output