我有一个应该“清理”字符串的函数,我想使用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;
}
任何想法?
答案 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
;