dotnet/runtime

Regex incorrectly identify surrogate pair unicode category

Ouverte

#16 922 ouverte le 7 avr. 2016

 (41 commentaires) (2 réactions) (0 personne assignée)C# (5 445 forks)batch import
area-System.Text.RegularExpressionsbughelp wanted

Métriques du dépôt

Stars
 (17 886 étoiles)
Métriques de merge PR
 (Merge moyen 12j 11h) (661 PRs mergées en 30 j)

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));
        }

Guide contributeur