如果我有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
。
问题是我不能把字符串作为第一个文字资本。任何建议都是最受欢迎的。
答案 0 :(得分:3)
此处不需要JS或PHP代码,因为您可以使用text-transform: capitalize
单独使用CSS执行此操作:
span {
text-transform: capitalize;
}
&#13;
<span>hybert-metal</span>
&#13;
我需要输入文本框,因此onchange事件会触发css技巧don&#34; t
是的,因为它适用于input
元素:
.capitalise {
text-transform: capitalize;
}
&#13;
<input type="text" class="capitalise" value="hybert-metal" />
&#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)
您可以使用explode
,implode
和array_map
功能来执行您想要的操作。
$string = 'hybert-metal';
$newString = implode('-', array_map(function ($value) {
return ucfirst($value);
}, explode('-', $string)));
echo $newString;
我在这做什么:
-
-
另一种选择可能是使用str_replace
和ucwords
$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