4

我必须过滤掉表单中的字符。因此,我实现了一个过滤掉算法,该算法运行良好,并根据不同的上下文使用不同的过滤器(变量);我也必须扩展使用重音字母。

例子:

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

奇怪的是,字母é(e 锐角)或è(e 坟墓)被考虑在内(被视为),而其他字母(如à(a 坟墓)则没有。我发现解决方案是使用八进制文字 - 例如\340\371分别用于坟墓或 u 坟墓。

Q1。关于为什么é(e急性)被成功地直接解析而其他重音字母没有的任何线索?

Q2。由于在想要检查或添加值时编写一长串八进制文字既麻烦又容易出错,有没有人有更好的想法或知道解决方法?

谢谢。

好的,这里是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 文件中其他地方定义的广泛范围的向量,以便函数可以访问它们。
4

1 回答 1

2

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

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

我写这个作为答案是因为我认为我不能直接评论这个问题。

于 2013-01-02T04:59:41.973 回答