如何在字符串中作为首字母后的第一个字母

时间:2016-07-14 08:07:10

标签: php jquery

如果我有hybert-metal这样的字符串,那么我需要输出为Hybert-Metal

我尝试了这些脚本:

<?php 
    $form['surname']->render(array('onChange'=>"javascript:this.value = this.value.toLowerCase()", 'onBlur'=>"javascript:this.value=this.value.replace(/\w\S*/g, function(txt){ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()})"));
?>
<input type="text" name="surname" onchange="javascript: this.value = this.value.replace(/\w\S*/g, function(txt){ return txt.charAt(0).toUpperCase() + txt.substr(1).toUpperCase() })" onblur="javascript: this.value = this.value.replace(/\w\S*/g, function(txt){ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase() })" id="surname">

在尝试编写脚本时,这会使Hybert生成,但使字符串metal保持不变。我的脚本后面的输出是Hybert-metal,但我需要Hybert-Metal

问题是我不能把字符串作为第一个文字资本。任何建议都是最受欢迎的。

3 个答案:

答案 0 :(得分:3)

此处不需要JS或PHP代码,因为您可以使用text-transform: capitalize单独使用CSS执行此操作:

&#13;
&#13;
span {
    text-transform: capitalize;
}
&#13;
<span>hybert-metal</span>
&#13;
&#13;
&#13;

  

我需要输入文本框,因此onchange事件会触发css技巧don&#34; t

是的,因为它适用于input元素:

&#13;
&#13;
.capitalise {
  text-transform: capitalize;
}
&#13;
<input type="text" class="capitalise" value="hybert-metal" />
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这是使用javascript regexp和替换方法的一种方法:

function capitalizeStrings(input) {

  if (typeof(input) == 'string') {
    var result = input.replace(input.substr(0,1), input.substr(0,1).toUpperCase());
    var index = result.match(new RegExp("-")).index;    
    result = result.replace(result.substr(index+1,1), result.substr(index+1,1).toUpperCase());

    return result;
  }

}
console.log(capitalizeStrings("hybert-metal")); // The output will be Hybert-Metal

你可以从php(基于你的例子)调用这个函数:

<?php 
$form['surname']->render(array('onChange'=>"capitalizeStrings(this.value)"));
?>

答案 2 :(得分:1)

您可以使用explodeimplodearray_map功能来执行您想要的操作。

$string = 'hybert-metal';
$newString = implode('-', array_map(function ($value) {
    return ucfirst($value);
}, explode('-', $string)));

echo $newString;

我在这做什么:

  • -
  • 上展开字符串
  • ucfirst结果数组的每个值
  • 使用-
  • 破坏结果数组

另一种选择可能是使用str_replaceucwords

$newString = str_replace(' ', '-', ucwords(str_replace('-', ' ', $string)));

一种类似的方法(可在PHP手册中找到)

function ucwords_delimited($string) {
    $string =ucwords(strtolower($string));

    foreach (array('-', '\'') as $delimiter) {
        if (strpos($string, $delimiter) !== false) {
            $string = implode($delimiter, array_map('ucfirst', explode($delimiter, $string)));
        }
    }
    return $string;
}

更新

我仔细研究了ucwords函数。通过阅读本手册,我了解到该函数有第二个(可选)参数,您可以选择分隔符。这使我们更容易,因此我们可以省略str_replace

// Make each word start with a capital
ucwords('something-devided', '-');

注意这支持PHP&gt; = 5.4.32,5.5.16

参考