【问题标题】:How to detect if string contains 1 uppercase letter in PHP如何在PHP中检测字符串是否包含1个大写字母
【发布时间】:2011-05-24 12:04:36
【问题描述】:

找不到此功能。我假设我需要使用正则表达式?

如果 url 包含至少 1 个大写字母,我会尝试在 php 中进行 html 重定向。

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

【问题讨论】:

  • @Bob:由于 DNS 名称不区分大小写,因此我不认为这样做有什么意义。
  • 这是我被要求做的事情,以改善 seo - 更改 url 站点结构 - 过去的 URL 具有大写字母 - 所以我们试图在过渡到新的 URL 时保留这些 URL 的页面强度那些。
  • Google 或任何搜索引擎是否真的会考虑域名的大小写?
  • 不太确定域 - 但我们更担心页面中的尾随文本。例如,许多 url 是篮球运动员的名字,原始链接都是 First_Last 格式,我们将其更改为 first_last,显然存在差异 - 不是 100% 的域。 wisegeek.com/are-urls-case-sensitive.htm
  • 对 URL 的本地部分(域之后的所有内容)有意义,它们确实区分大小写。如果您也想重写这些,那么这个问题是有道理的。如果只是为了域名,我不会担心的。

标签: php regex string


【解决方案1】:

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

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

【讨论】:

  • "有至少一个上
  • + 完全没有必要。
  • 您应该注意到,今天,域名不仅包含美国字母。所以这将在必须的情况下工作,但不是全部。例如,这是一个有效的丹麦网址:www.rødgrødmedFLØDE.dk
  • @luckydonald 将 U 标志添加到 PCRE reg exp,它应该工作未验证
【解决方案2】:
if (strtolower($url) != $url){
  //etc...

【讨论】:

  • 相对于什么?为这样简单的事情重新发明轮子是愚蠢的。
  • 相对于正则表达式,恕我直言,这是解决这个问题的更语义化的方式(因为正则表达式本身描述了我们所做的事情)。
  • 为此使用正则表达式是矫枉过正的定义,更不用说开销相当高。
  • @Tyler Eaves:假设您有 10mb 的文本。 strtolower 将需要一些时间来执行,但正则表达式将在第一次出现大写字符时返回 true。
  • 使用 mbstring 扩展名中的 mb_strtolower() 来代替非 ascii 字母。首先相应地设置编码。
【解决方案3】:

你也可以试试这个

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

不确定这是否比提出的其他两种方法更有效。

【讨论】:

  • 我觉得这是更直接的答案,因为它是 PHP 中已经存在的函数。
  • 这将适用于包含字母字符的字符串。例如,它不适用于字符串the quicknoupper1
【解决方案4】:
preg_match_all('%\p{Lu}%usD', 'aA,éÁ,eE,éÉ,iI,íÍ,oO,óÓ,öÖ,őŐ,uU,úÚ,üÜ,űŰ', $m);
echo '<pre>';
var_dump($m);
echo '</pre>';

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

【讨论】:

    【解决方案5】:

    这是一个更简单的例子:

    $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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 2014-04-22
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多