dotnet/runtime

Regex incorrectly identify surrogate pair unicode category

Aberta

#16.922 aberto em 7 de abr. de 2016

 (41 comentários) (2 reações) (0 responsável)C# (5.445 forks)batch import
area-System.Text.RegularExpressionsbughelp wanted

Métricas do repositório

Stars
 (17.886 estrelas)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

This defect makes regex useless when you need to match string using unicode categories and string could contain surrogate pairs:

        [Test]
        public void ClassifySurrogates_Test()
        {
            var value = "𦕒";
            var regexLetters = new Regex(@"^\p{Lo}$");

            var regexSurrogates = new Regex(@"^\p{Cs}{2}$");

            Assert.AreEqual(UnicodeCategory.OtherLetter, char.GetUnicodeCategory(value, 0));
            Assert.AreEqual(UnicodeCategory.OtherLetter, CharUnicodeInfo.GetUnicodeCategory(value, 0));
            Assert.True(regexSurrogates.IsMatch(value));

            // Fails here
            Assert.True(regexLetters.IsMatch(value));
        }

Guia do colaborador