2012-12-24 43 views
4

我必须过滤掉表格中的字符。因此,我实现了一个过滤算法,该算法运行良好,并根据不同的上下文使用不同的过滤器(变量);我也必须延长重音字母的使用。有没有办法在字符串中使用非八进制文字?

实施例:

gFilterALPHA1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'-–àâäéèêëîïôöùüûÀÂÄÉÈÊËÎIÔÖÙÛÜæÆœŒçÇ "; 

奇怪的是,字母é(E急性)或è(E坟墓)被考虑在内(视为这样),而其他如à(严重)则不是。我发现解决方案使用的是八进制字体,例如\340\371分别用于坟墓或坟墓。

Q1。任何关于为什么é(e锐)成功解析直接而其他重音字母不是? Q2302。由于编写长字符串的八进制文字既繁琐又容易出错,因此当需要检查或添加值时,是否有人有更好的主意或知道解决方法?

谢谢。

好的,这里是代码thg435认为它有用的看看。

function jFiltre_Champ(event, NomDuFiltre) 
{ 
    var LeChamp=event.target.value; // value est de type ARRAY 
    switch (NomDuFiltre) 
    { 
     case "NUM1": 
     LeFiltre=gFiltreNUM1; 
     Msg=gMessageNUM1; 
     break; 
    case "ALPHA1": 
     LeFiltre=gFiltreALPHA1; 
     Msg=gMessageALPHA1; 
     break; 
    case "DATE1": 
     LeFiltre=gFiltreDATE1; 
     Msg=gMessageDATE1; 
    break; 
    case "ALPHANUM1": 
     LeFiltre=gFiltreALPHANUM1; 
     Msg=gMessageALPHANUM1; 
     break; 
    case "ALPHANUM2": 
     LeFiltre=gFiltreALPHANUM2; 
     Msg=gMessageALPHANUM2; 
     break; 
} 
Longueur=LeFiltre.length; 
for (i=0; i<LeChamp.length; i++) 
{ 
    leCar = LeChamp.charAt(i); 
    for (j = 0; j < Longueur; j++) 
    { 
     if (leCar==LeFiltre.charAt(j)) break; 
    } 
    if (j==Longueur) 
    { 
     alert(Msg); 
    /*Cf doc. pour l'algorithme de la méthode slice*/ 
     document.getElementById(event.target.id).value=event.target.value.slice("0", i); 
     break; 
    } 
} 

}

这里是一个英式风格的版本:(关于(2))

function jform_input_filter(event, filterName) 
{ 
    var current_input = event.target.value; // the value is an array 
    switch (filterName) 
    { 
     case "NUM1": 
     current_filter = gFilterNUM1; 
     Msg = gMessageNUM1; 
     break; 
    case "ALPHA1": 
     current_filter = gFilterALPHA1; 
     Msg = gMessageALPHA1; 
     break; 
    case "DATE1": 
     current_filter = gFilterDATE1; 
     Msg = gMessageDATE1; 
    break; 
    case "ALPHANUM1": 
     current_filter = gFilterALPHANUM1; 
     Msg = gMessageALPHANUM1; 
     break; 
    case "ALPHANUM2": 
     current_filter = gFilterALPHANUM2; 
     Msg = gMessageALPHANUM2; 
     break; 
} 
length = current_filter.length; 
for (i = 0; i < current_input.length; i++) 
{ 
    leCar = current_input.charAt(i); 
    for (j = 0; j < length; j++) 
    { 
     if (leCar==current_filter.charAt(j)) break; 
    } 
    if (j == length) 
    { 
     alert(Msg); 
    /*Cf doc. pour l'algorithme de la méthode slice*/ 
     document.getElementById(event.target.id).value=event.target.value.slice("0", i); 
     break; 
    } 
} 

评论:

  1. 我个人不应该认为这个代码很有用回答原始问题;
  2. 变量和注释使用法语,这可能会导致难以阅读某些内容 - 对此感到抱歉;
  3. 此函数与HTML表单中的'onchange'事件相关联;
  4. 'g'个变量(例如gFiltreALPHANUM2)是在同一个.js文件的其他位置定义的宽范围向量,以便它们可以被函数访问。
+1

http://stackoverflow.com/questions/280712/javascript-unicode – mplungjan

+1

http://stackoverflow.com/questions/3939266/javascript-function-to-remove-diacritics – mplungjan

+2

你能告诉我们你的代码吗?另外,接受你的问题的一些答案。 – georg

回答

2

Bergi可能是正确的:您的文件可能已保存或以错误的编码传送。考虑UTF-8作为Unicode字符集的良好支持的编码。为了测试这个想法,你可以临时调整你的脚本,以便在页面中输出a -with-acute-accent,无论是在一个字段还是一个文本节点。在字符串文字中使用逐字字符,而不是其八进制转义码。如果它出现乱码,那么这个角色并没有将它的原始形式放入浏览器中,并且你遇到了编码问题。

如果确认编码问题,则需要正确保存文件或调整响应字符编码,这取决于您的特定Web服务器。通过使用Fiddler并检查Content-Type响应标题,您可以找到Web服务器提供的当前编码。如果Web服务器已经认为您的文件使用了正确的编码(最好是UTF-8),那么请检查您的文本编辑器,确保它以相同的编码保存JavaScript文件。

我正在写这个答案,因为我不认为我可以直接评论这个问题。

相关问题