Regex to match ALL-CAPS words of a certain length

前端 未结 2 473
时光取名叫无心
时光取名叫无心 2021-01-18 11:26

I have a function which fixes capitalization for those naughty users that insist on making everything UPPERCASE!

I want my function to only be called when a string c

2条回答
  •  长发绾君心
    2021-01-18 12:30

    if (preg_match('/[A-Z]{3,}|\b[A-Z]\b/', $str)) {
        // Naughty user!
    }
    

    Let's look at that...

    [A-Z] // Character class from A-Z
    {3,} // 3 or more quantifier
    | // Logical or pipe
    \b // Word boundary
    [A-Z] // Character class from A-Z
    \b // Word boundary
    

    That may make it easier to understand :)

    This will match if between two word boundaries all capitals and/or if there are 3 uppercase letters in a row. Please clarify if that is what you want.

    Update

    You may want to decide what triggers a whole word with capitals. For example, this sentence would be considered naughty.

    I like apples.

    .. because of the I. Perhaps you want to put a quantifier there too, like {2,}. It depends on what the string will contain.

提交回复
热议问题