如何在php中将19a史密斯街改为19A史密斯街

时间:2015-07-07 02:42:21

标签: php

我想将街道地址转换为Title Case。这不完全是Title Case,因为一串数字末尾的字母应该是大写的。例如史密斯街19号。

我知道我可以使用

将“19史密斯街”改为“19史密斯街”
$str = ucwords(strtolower($str))

但是将“19a史密斯街”改为“19a史密斯街”。

如何将其转换为“19A史密斯街”?

4 个答案:

答案 0 :(得分:4)

另一种方法,虽然这是一种非常自定义的行为,但更长,但可能更容易调整其他不可预测的情况。

$string = "19a smith STREET";

// normalize everything to lower case
$string = strtolower($string);

// all words with upper case
$string = ucwords($string);

// replace any letter right after a number with its uppercase version
$string = preg_replace_callback('/([0-9])([a-z])/', function($matches){
    return $matches[1] . strtoupper($matches[2]);
}, $string);

echo $string;
// echoes 19A Smith Street

// 19-45n carlsBERG aVenue  ->  19-45N Carlsberg Avenue

答案 1 :(得分:1)

这是你可以使用正则表达式的一条路线。

    class AdminManagerCanVisitController < ApplicationController
        before_filter :admin_or_manager_authenticate

    class AdminEmployeeCanVisitController < ApplicationController
        before_filter :admin_or_employee_authenticate

   class AdminOutsiderCanVisitController < ApplicationController
        before_filter :admin_or_outsider_authenticate

    class AdminManagerEmployeeCanVisitController < ApplicationController
        before_filter :admin_or_manager_employee_authenticate

输出:

  史密斯街19A号

正则表达式演示:https://regex101.com/r/nS9rK0/2
PHP演示:http://sandbox.onlinephpfunctions.com/code/febe99be24cf92ae3ff32fbafca63e5a81592e3c

答案 2 :(得分:1)

根据Juank的回答,我实际上最终使用了。

     $str = preg_replace_callback('/([0-9])([a-z])/', function($matches){
           return $matches[1] . strtoupper($matches[2]);
      }, ucwords(strtolower($str))); 

答案 3 :(得分:0)

您可以将该行拆分为2个子串,分别格式化每个子串,然后再将2个子串重新组合在一起。

$str = '19a smith STREET';
$split = strpos($str, ' ');
$str1 = strtoupper(substr($str, 0, $split + 1));
$str2 = ucwords(strtolower(substr($str, $split + 1)));
$str = $str1 . $str2;
echo $str;

结果:史密斯街19号

PHP演示:http://sandbox.onlinephpfunctions.com/code/9119643624c77b0c9cc584150e556a5d92c92981