Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex to restrict UPPERCASE only

I am stil struggling with understanding how Regex works exactly.

I am getting usernames and they are in this format:

firstname.lastname

Both names may contain special international characters and they may contain an ' or - but I just need to detect if they contain any uppercase letters so I can throw an exception.

I am using this expression

[^A-Z].[^A-Z]

It seems to me that this should work, I just don't understand why it doesn't.

I hope somebody could explain.

Thanks!

like image 442
laitha0 Avatar asked Jul 25 '13 14:07

laitha0


Video Answer


3 Answers

[^A-Z] Simply means any character that isn't a capital A through capital Z.

. Means any character you should be using \. As this means the literal character .

A character group is [] and the inverse is [^] you then put the characters you want to match.

However, your regex looks like it will match only a single character that isn't a capital letter then any character then another single character that isn't a capital letter

You want to use the following:

[^A-Z]+\.[^A-Z]+

The + in regex means match the before stated 1 to infinite times.

If you are only going to have this text and no other text you should include the start of line and end of line tag so that it doesn't match long strings that include something formatted like you mentioned.

However, your regex does also match spaces and tabs.

So I would use the following:

^[^A-Z\s]+\.[^A-Z\s]+$

Regex Demo working with only lowercase

Regex Demo failing because username has uppercase letter

like image 90
abc123 Avatar answered Oct 06 '22 13:10

abc123


Instead of using regex you could use this method to check for upper case characters.

public static bool checkStringForUpperCase(string s) 
{
    for (int i = 0; i < s.Length; i++)
    {
        if (char.IsUpper(s[i]))
            return false;
    }
    return true;
}
like image 38
BradW Avatar answered Oct 06 '22 13:10

BradW


If you want to check that there is no uppercase, you don't need dot int middle, you can use just [^A-Z] You should use start and end regex symbols and sign that this can be more then one symbol. If i remember correctly it should be something like ^[^A-Z]*$

like image 29
nikodz Avatar answered Oct 06 '22 12:10

nikodz