Сопоставьте непечатаемые/не ascii символы и удалите из текста - программирование
Подтвердить что ты не робот

Сопоставьте непечатаемые/не ascii символы и удалите из текста

Мой JavaScript довольно ржавый, поэтому любая помощь с этим будет замечательной. У меня есть требование обнаружить непечатаемые символы (управляющие символы, такие как SOH, BS и т.д.), А также расширенные символы ascii, такие как Ž в строке, и удалить их, но я не уверен, как написать код?

Может ли кто-нибудь указать мне в правильном направлении, как это сделать? Это то, что у меня есть до сих пор:

$(document).ready(function() {
    $('.jsTextArea').blur(function() {
        var pattern = /[^\000-\031]+/gi;
        var val = $(this).val();
        if (pattern.test(val)) {    
        for (var i = 0; i < val.length; i++) {
            var res = val.charAt([i]);
                alert("Character " + [i] + " " + res);              
        }          
    }
    else {
         alert("It failed");
     }

    });
});
4b9b3361

Ответ 1

Для тех, у кого есть эта проблема, и вы ищете решение "исправить все"... Вот как я в конце концов ее исправил:

public static string RemoveTroublesomeCharacters(string inString)
{
    if (inString == null)
    {
        return null;
    }

    else
    {
        char ch;
        Regex regex = new Regex(@"[^\u0000-\u007F]", RegexOptions.IgnoreCase);
        Match charMatch = regex.Match(inString);

        for (int i = 0; i < inString.Length; i++)
        {
            ch = inString[i];
            if (char.IsControl(ch))
            {
                string matchedChar = ch.ToString();
                inString = inString.Replace(matchedChar, string.Empty);
            }
        }

        while (charMatch.Success)
        {
            string matchedChar = charMatch.ToString();
            inString = inString.Replace(matchedChar, string.Empty);
            charMatch = charMatch.NextMatch();
        }
    }       

    return inString;
}

Я разберу его немного более подробно для тех, кто менее опытен:

  • Сначала мы прокручиваем каждый символ всей строки и используем метод IsControl для char, чтобы определить, является ли символ управляющим символом или нет.

  • Если найден управляющий символ, скопируйте соответствующий символ в строку, затем используйте метод Replace, чтобы изменить символ управления на пустую строку. Промойте и повторите для остальной части строки.

  • После того, как мы пропустим всю строку, мы используем определенное регулярное выражение (которое будет соответствовать любому символу, который не является символом управления или стандартным символом ascii) и снова заменяет сопоставленный символ пустой строкой. Выполнение этого цикла while означает, что все время charMatch истинно, символ будет заменен.

  • Наконец, как только все символы удаляются, и мы зациклировали всю строку, мы возвращаем inString.

(Примечание. Мне еще не удалось выяснить, как повторно заполнить TextBox новым измененным значением inString, поэтому, если кто-нибудь может указать, как это можно сделать, это было бы здорово)

Ответ 2

Для нацеливания на символы, которые не входят в базовый диапазон ASCII для печати, вы можете использовать это простое регулярное выражение:

[^ -~]+

Объяснение: в первых 128 символах таблицы ASCII диапазон печати начинается с символа пробела и заканчивается тильдой. Это персонажи, которых вы хотите сохранить. Этот диапазон выражается с помощью [ -~], а символы, не входящие в этот диапазон, обозначаются с помощью [^ -~]. Это те, которые мы хотим заменить. Следовательно:

result = string.replace(/[^ -~]+/g, "");

Ответ 3

Нет необходимости тестировать, вы можете напрямую обработать содержимое текстового поля:

textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');

где диапазон \x20-\x7E охватывает печатную часть таблицы ascii.

Пример с кодом:

$('.jsTextArea').blur(function() {
    this.value = this.value.replace(/[^\x20-\x7E]+/g, '');
});

Ответ 4

Вам нужно назначить шаблон (вместо строки) в переменную isNonAscii, а затем использовать test(), чтобы проверить, соответствует ли она. test() возвращает true или false.

$(document).ready(function() {
    $('.jsTextArea').blur(function() {
        var pattern = /[^\000-\031]+/gi;
        var val = $(this).val();
        if (pattern.test(val)) {
            alert("It matched");
        }
        else {
            alert("It did NOT match");
        }
    });
});

Отметьте jsFiddle