dotnet/runtime
Regex incorrectly identify surrogate pair unicode category
オープン
#16,922 opened on 2016/04/07
area-System.Text.RegularExpressionsbughelp wanted
Repository metrics
- Stars
- (17,886 個のスター)
- PR merge metrics
- (平均マージ 12d 11h) (30d で 661 merged PRs)
説明
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));
}