RegEx не работает на DocuSign для проверки текста - PullRequest
0 голосов
/ 19 сентября 2019

Я создал RegEx в своем текстовом поле для проверки точного текста (без учета регистра) на конверте DocuSign: ^ (? I) (Lu, приблизительно 1000 частей) $

При открытии конверта, если я наберу правильный или неправильный текст, текстовое поле будет выделено красным цветом.Таким образом, я не могу утвердить свой конверт, и мое сообщение об ошибке RegEx даже не отображается (такое же поведение, если контент не предоставляется).

В руководстве по проверке данных DocuSign сказано, что мы можемиспользуйте RegexStorm.NET для проверки нашего RegEx.Я сделал это, и это работает.

В документации также указано, что DocuSign использует механизм .NET RegEx.Я сделал тест в .NET, и снова мой RegEx работает (см. моя .NET Fiddle ).

Если я удаляю (?i) из моего RegEx, это работает, но мне нужен case-нечувствительный.

Кажется, есть проблема DocuSign-стороны с RegEx.

Есть идеи, как мне это сделать?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 сентября 2019

Я получил ответ от службы поддержки DocuSign, и они согласились с тем, что проблема связана с ними, и занимаются ее расследованием.

Что я сделал в качестве обходного пути, в моем тексте я заменяю каждого персонажа всеми егоформы (нижний / верхний / акцент), подобные тексту для «approuvé»: ^[aA][pP][pP][rR][oO][uU][vV][éÉeE]$

Это работает как шарм, но писать это не очень удобно, поэтому я написал некоторый код для автоматизации переводамои тексты в этот вид RegEx:

/// <summary>
/// Set a regular expression to the Text Tab
/// </summary>
/// <param name="textTab">Text Tab</param>
/// <param name="text">Text which will be converted into the regular expression</param>
private void SetRegex(TextTab textTab, string text)
{
    if (!string.IsNullOrEmpty(text))
    {
        var regex = GetRegExWithoutCasse(text);
        textTab.ValidationPattern = regex;
        textTab.ValidationMessage = string.Format("Please type: {0}", text);
    }
}

/// <summary>
/// Get the RegEx associated to the text without casing-check
/// </summary>
/// <param name="text">Text to check</param>
/// <returns>Regular expression</returns>
private string GetRegExWithoutCasse(string text)
{
    var result = string.Empty;
    foreach (var letter in text.Select(i => i.ToString()))
    {
        if (Regex.IsMatch(letter, @"^[a-zA-Z]+$"))
            result += "[" + letter.ToLower() + letter.ToUpper() + "]";
        else
        {
            var textWithoutDiacritics = RemoveDiacritics(letter);
            if (textWithoutDiacritics != letter)
                result += "[" + textWithoutDiacritics.ToLower() + textWithoutDiacritics.ToUpper() + letter.ToLower() + letter.ToUpper() + "]";
            else
                result += letter.ToString();
        }
    }

    return "^" + result + "$";
}

/// <summary>
/// Remove diacritics from text
/// </summary>
/// <param name="text">Text</param>
/// <returns>Clean text</returns>
private string RemoveDiacritics(string text)
{
    var tempBytes = System.Text.Encoding.GetEncoding("ISO-8859-8").GetBytes(text);
    var asciiStr = System.Text.Encoding.UTF8.GetString(tempBytes);
    return asciiStr;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...