Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion GameFrameX.Foundation.Extensions/StringExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public static string FromUrlSafeBase64(this string value, bool addPadding)
/// Regex for matching Chinese characters.
/// Matching range includes basic Chinese characters (0x4e00-0x9fa5), excluding rare characters, variant characters, and other extended Chinese characters.
/// </remarks>
private static readonly Regex CnReg = new(@"[\u4e00-\u9fa5]");
private static readonly Regex CnReg = new(@"[\u4e00-\u9fa5]", RegexOptions.None, TimeSpan.FromSeconds(1));

/// <summary>
/// 计算字符串的显示宽度,汉字等宽字符算作 2 个单位宽度,其他字符算作 1 个单位宽度。
Expand Down
15 changes: 15 additions & 0 deletions GameFrameX.Foundation.Tests/Extensions/StringExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,21 @@ public void TrimZhCn_StringWithoutChineseChars_ShouldReturnOriginalString()
Assert.Equal("Hello World", result);
}

[Fact]
public void TrimZhCn_CnReg_ShouldHaveOneSecondMatchTimeout()
{
// Arrange — 反射读取 CnReg 私有静态字段,验证 Sonar S6444 fix 实际生效。
var field = typeof(StringExtensions).GetField("CnReg", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
Assert.NotNull(field);

// Act
var regex = (Regex)field.GetValue(null);

// Assert
Assert.NotNull(regex);
Assert.Equal(TimeSpan.FromSeconds(1), regex.MatchTimeout);
}

#endregion

#region EqualsFast Tests
Expand Down