[英]Regex to restrict UPPERCASE only
我很難理解Regex的工作原理。
我收到用戶名,他們采用以下格式:
firstname.lastname
兩個名稱都可能包含特殊的國際字符,它們可能包含'或 - 但我只需要檢測它們是否包含任何大寫字母,這樣我就可以拋出異常。
我正在使用這個表達式
[^A-Z].[^A-Z]
在我看來,這應該工作,我只是不明白為什么它不。
我希望有人能解釋一下。
謝謝!
[^AZ]
簡單地表示任何不是資本A到資本Z的角色。
.
意味着你應該使用的任何角色\\.
因為這意味着字面意思.
字符組為[]
,反之為[^]
,然后放置要匹配的字符。
但是,你的正則表達式看起來只匹配一個不是大寫字母的單個字符,然后是任何字符,然后是另一個不是大寫字母的單個字符
您想要使用以下內容:
[^AZ]+\\.[^AZ]+
正則表達式中的+
表示將前面提到的1與無限時間匹配。
如果您只打算使用此文本而不包含其他文本,則應包含行首和行尾標記,以使其與包含您提到的格式的長字符串不匹配。
但是,您的正則表達式也匹配空格和制表符。
所以我會使用以下內容:
^[^AZ\\s]+\\.[^AZ\\s]+$
您可以使用此方法檢查大寫字符,而不是使用正則表達式。
public static bool checkStringForUpperCase(string s)
{
for (int i = 0; i < s.Length; i++)
{
if (char.IsUpper(s[i]))
return false;
}
return true;
}
如果你想檢查沒有大寫,你不需要dot int middle,你可以只使用[^AZ]
你應該使用start
和end
正則表達式符號並簽名這可能是一個符號。 如果我沒記錯的話應該是^[^AZ]*$
如果您只想檢查它是否包含大寫。 試試這個。
string test = @"Test";
string test2 = "test";
bool result = test.Any(x=>char.IsUpper(x)); //true
result = test2.Any(x => char.IsUpper(x));//false
顯然,唯一正確的答案是使用\\p{Lu}
來匹配大寫的Unicode字母。 除了[AZ]
之外,國家字母表中還有其他大寫字母。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.