我有一个 title
字符串,该字符串来 self 的用户将提交的表单。我想采用该标题
,无论它以何种方式编写,并将其格式化为标题大小写,我认为这是最易于阅读的方式。
alexis Sanchez -> Alexis Sanchez
sanchez's ball -> Sanchez's Ball
sanchez and co -> Sanchez and Co
我还想将“and”或“or”等单词设为小写,如上所示。这可能吗?
另外,在某些情况下,我想获取此标题
并对其进行过滤,以便它忽略撇号等任何特殊字符并用破折号分隔它。这将用于 URL(即 .com/sanchezs-ball
)。
alexis Sanchez -> alexis-sanchez
ALEXIS Sanchez -> alexis-sanchez
sanchez's ball -> sanchezs-ball
我创建了两个几乎可以完成此操作的函数。我只需要一些关于如何调整它们以使其达到我想要的格式的建议。
这个将我的 title
转换为类似 URL 的字符串。这可以改进/缩短吗?
function hashifyString(dirtyString) {
var title = dirtyString
.replace(/[^a-z0-9\s]/gi, '')
.replace(/\b\w+/g,function(s){return s.substr(0).toLowerCase();})
.replace(/[_\s]/g, '-');
return title;
}
我需要一些关于如何改进这个的建议,因此它会查找“and”或“or”并将这两个单词保持小写,同时保持字符串标题其余部分的大小写?
function beautifyString(dirtyString) {
var string = dirtyString
.replace(/[^a-z0-9\s]/gi, '')
.replace(/\b\w+/g,function(s){return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();})
return string;
}
我希望这是有道理的。任何帮助表示赞赏。提前致谢!
最佳答案
首先让我们简单地创建一个 inArray
函数。
function inArray(val, ary){
for(var i=0,l=ary.length; i<l; i++){
if(ary[i] === val){
return true;
}
}
return false;
}
现在我们需要创建一个函数,使整个字符串小写,这样我们就可以只大写每个单词的第一个字母。这可以通过拆分 ' '
上的小写字符串来完成。接下来,我们循环遍历 .split(' ')
的结果,测试它是否是 exceptions
数组中的单词之一。如果是这样,我们不会将其大写,否则我们会大写。 .join(' ')
所有内容都回到我们 .split(' ')
上的同一个 ' '
上,并返回结果。
function ucFirstWord(str, exceptions){
var st = str.toLowerCase().split(' '), r = [];
for(var i=0,l=st.length; i<l; i++){
var s = st[i];
var x = inArray(s, exceptions) ? s : s.charAt(0).toUpperCase()+s.substring(1);
r.push(x);
}
return r.join(' ');
}
这个函数应该是不言自明的。
function lcHyphenize(str){
return str.toLowerCase().replace(' ', '-');
}
用法:
var ucString = ucFirstWord(yourStringVar, ['the', 'and', 'then', 'but', 'or', 'yet']);
var hzString = lcHyphenize(yourStringVar);
关于javascript - 将字符串转换为各种格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307910/