我有一个不允许重音的文本字段。我正在使用此代码:
<input type="text" onkeyup="value=value.replace(/[^0-9a-zA-Z' ']/g,'')">
而不是阻止字符,我需要替换它们,例如通过键入Çchange to C
我找到了一个函数并且可以正常工作,但是当我键入一个点时,会出现字母A
你能帮我吗?
<script>function retiraAcento(palavra,obj){
com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ<,>´`-,*/~';
sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC ';
nova='';
for(i=0;i<palavra.length;i++) {
if (com_acento.search(palavra.substr(i,1))>=0) {
nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1);
} else {
nova+=palavra.substr(i,1);
}
}
obj.value = nova;}</script><input type="text" onKeyUp="javascript:retiraAcento(this.value, this);">
答案 0 :(得分:1)
我没有足够深入地研究为什么.
被替换为A,但是此版本没有这种行为。它不能完全一样地工作,并且可以在整个字符串上运行,但是除非在大型文本字段中使用它,否则这可能不是问题,在这种情况下,可以通过其他方式对其进行优化。
const com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ<,>´`-,~';
const sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC ';
function retiraAcento(string) {
return string
.split('')
.map(char => {
const charIdx = com_acento.indexOf(char)
if (charIdx !== -1) {
return sem_acento[charIdx]
}
return char
})
.join('')
}
function replaceCharOnChange(evt) {
event.target.value = retiraAcento(evt.target.value)
}
document.querySelector('input').addEventListener('keyup', replaceCharOnChange)
对不起,这是用英语重写的一半!除了两个相同长度的字符串,我还将考虑使用其他数据结构。最简单的是对象查找表,例如:
{á: 'a', ç: 'c', ...}
但是您也可以通过其他方式进行操作