簡體   English   中英

正則表達式僅限制大寫

[英]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]你應該使用startend正則表達式符號並簽名這可能是一個符號。 如果我沒記錯的話應該是^[^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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM