正则表达式匹配一定长度的ALL-CAPS单词

时间:2010-11-23 10:32:51

标签: php regex

我有一个功能可以修复那些坚持让一切都变得更好的顽皮用户的资本化!

我希望仅在字符串包含大写字母为3或更多大写字母时调用我的函数。

这可以用正则表达式完成吗?

例子: 例如:I = falseDEAL = trueWelcome = false

2 个答案:

答案 0 :(得分:13)

if (preg_match('/\b\p{L}*\p{Lu}{3}\p{L}*\b/u', $str)) {
    // Naughty user!
}

将匹配包含的任何单词至少三个大写字母。这个单词是以大写还是小写字母开头并不重要,因此它会匹配,例如iTUNESStackOVERflow作为完整单词。

如果您想将自己限制为包含完全由大写字符组成的单词(三个或更多),请使用

if (preg_match('/\b\p{Lu}{3,}\b/u', $str)) {
    // Naughty user!
}

答案 1 :(得分:7)

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

让我们看看......

[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

这可能会让人更容易理解:)

如果两个单词边界之间的所有大写和/或一行中有3个大写字母,则匹配。请澄清这是否是您想要的。

更新

您可能想要决定用大写字母触发整个单词的内容。例如,这句话将被视为 naughty

  

我喜欢苹果。

..因为I。也许你想在那里放一个量词,比如{2,}。这取决于字符串将包含的内容。

相关问题