2010-12-13 120 views
15

找不到此功能。我假设我需要使用正则表达式?如何检测字符串是否包含PHP中的1个大写字母

我想在php中至少包含1个大写字母的情况下做html重定向。

例如:http://www.domain.com/Michael_Jordan需要重定向到http://www.domain.com/michael_jordan - 唯一的问题是我似乎无法找到一个脚本来检测,如果至少有一个大写字母存在。

+0

@Bob:我没有看到的做点相同您的示例,因为DNS名称不区分大小写。 – RageZ 2010-12-13 06:37:10

+0

这是我被要求做的事情,以改善seo - 改变的网站结构 - 过去的网址已经大写字母 - 所以我们试图保留页面的力量从这些网址转换到新的。 – 2010-12-13 06:49:27

+0

@Bob:我明白了,这解释了它 – RageZ 2010-12-13 06:51:35

回答

26

一些正则表达式应该能够工作,你可以使用preg_match[A-Z]

if(preg_match('/[A-Z]/', $domain)){ 
// There is one upper 
} 
+1

“有**至少**一个上一个 – zerkms 2010-12-13 06:32:54

+0

@zerkms对不起你错的点失踪'+' – RageZ 2010-12-13 06:34:34

+4

'+'是完全没有必要的 – eyelidlessness 2010-12-13 06:37:06

27
if (strtolower($url) != $url){ 
    //etc... 
+0

确实很简单,但不是它过度使用strtolower? – zerkms 2010-12-13 06:38:17

+1

而不是什么?为这种简单的东西重塑车轮只是愚蠢的。 – 2010-12-13 06:40:13

+0

与正则表达式(即imho)相比,解决此问题的更多语义方法(因为正则表达式本身描述了我们所做的)。 – zerkms 2010-12-13 06:41:55

4

你也可以试试这个

if (!ctype_lower($string)) { 
    // there is at least une uppercase character 
} 

不知道这是不是更有效提出另外两种方法。

+0

我觉得这是更直接的答案,作为一个已经存在于PHP中的函数。 – Anther 2013-07-02 15:08:07

+2

这将适用于包含字母*只*的字符串,例如,它不会对字符串'the快速“或”noupper1“。 – FixMaker 2013-09-04 11:29:49

1
preg_match_all('%\p{Lu}%usD', 'aA,éÁ,eE,éÉ,iI,íÍ,oO,óÓ,öÖ,őŐ,uU,úÚ,üÜ,űŰ', $m); 
echo '<pre>'; 
var_dump($m); 
echo '</pre>'; 

经过匈牙利语utf-8字符测试,[A-Z]仅适用于latin1。

0

下面是一个简单的如:

$mydir = "C:\Users\John" ; 

print preg_match('/^[A-Z]:\.*/', $mydir, $match)."\n" ; 
print $match[0]. " preg match \n" ; 

产地:

1 
C: preg match 

这表明,括号是不必要的 - 获得一个匹配,至少

看这更具体的为您的应用程序:PHP to SEARCH the Upper+Lower Case mixed Words in the strings?

相关问题