我在PHP中有这个功能:
function sanitizeKey($str){
$str = strtolower($str);
$str = preg_replace('/[^\da-z ]/i', '', trim(ucwords($str)));
$str = str_replace(" ", "", $str);
$str = lcfirst($str);
return $str;
}
针对Manufacture's P/N
投放时,输出为manufacturesPn
。
我在Javascript中重写了相同的功能,到目前为止还有这段代码:
str = "Manufacture's P/N";
str = str.toLowerCase()
.replace(/\b[a-z]/g, function(letter) { // php's ucwords
return letter.toUpperCase();
});
str = str.trim(); // remove leading & trailing whitespace
str = str.replace("/[^\da-z ]/i", ''); // keep alphanumeric
str = str.replace(/\s+/g, ''); // remove whitespace
str = str.replace(/\b[a-z]/g, function(letter) { // php's lcfirst
return letter.toLowerCase();
});
console.log(str);
此时如果我输入Manufacture's P/N
,则当前输出为Manufacture'SP/N
。
问题 如何更改我的JavaScript代码以复制PHP程序,以便为同一输入生成相同的输出?
答案 0 :(得分:1)
您可以使用:
str = "Manufacture's P/N";
console.log(
str.trim()
.toLowerCase()
.replace(/[^\da-z ]+/gi, '')
.replace(/(?!^)\b[a-z]/g, function(c) {
return c.toUpperCase();
})
.replace(/\s+/g, '')
)
//=> "manufacturesPn"

在Javascript中你不应该引用正则表达式,例如"/[^\da-z ]/i"
并使用全局标志来全局替换。
答案 1 :(得分:1)
您可以匹配.test()
函数中.indexOf()
,.replace()
内的每个字符使用
var str = "Manufacture's P/N";
var res = str.replace(/./g, function(p) {
return /[a-z]/i.test(p) && !/\s/.test(str[str.indexOf(p) - 1])
? p.toLowerCase() : /['/ ]/.test(p) ? "" : p
});
console.log(res);

答案 2 :(得分:1)
请试一试。
str = "Manufacture's P/N";
str = $.trim(str).split(" ");
str1 = str[0].toLowerCase().replace("'", '');
str2 = str[1].toLowerCase().replace("/", '');
str3 = str2.charAt(0).toUpperCase() + str2.slice(1);
finalString = str1 + str3;
return finalString;
console.log(finalString);