将JavaScript字符串转换为全小写

1415

如何将JavaScript字符串值转换为小写字母?

示例:"Your Name" 转为 "your name"


像这样的问题,真的值得让提问者获得14,000声望吗?每个字符大约130声望(然而似乎没有尝试自己解决问题...或者谷歌一下解决方案),并且即使他已经5年没有登录了,仍然让提问者获得“网站前2%”的称号! - ashleedawg
16个回答

1821
const lowerCaseName = "Your Name".toLowerCase(); // your name

33
请考虑以下内容:“toLowerCase 不会影响字符串 str 本身的值”。这基于此处的文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase - Cary Bondoc
1
toLowerCase()函数的时间和空间复杂度是什么? - Rami Chasygov
11
除非你有被极其聪明的白痴编程的JavaScript引擎,否则这个方法既是O(n)的,又比在JavaScript中重新实现它更快。 - wizzwizz4
7
一个更安全的调用 toLowerCase() 方法的方式是 (varName || '').toLowerCase() - Dinesh Pandiyan

434
使用String对象的toLowerCasetoLocaleLowerCase方法。区别在于,toLocaleLowerCase会考虑用户/主机当前语言环境。根据ECMAScript Language Specification (ECMA-262)的§ 15.5.4.17,toLocaleLowerCase与 toLowerCase 完全相同,只是其结果旨在产生适合主机环境当前语言环境的正确结果,而不是一个独立于语言环境的结果。只有在少数情况下(例如土耳其语),该语言的规则与常规Unicode大小写映射发生冲突时才会有差异。
示例:
var lower = 'Your Name'.toLowerCase();

还要注意,toLowerCasetoLocaleLowerCase 函数的实现是通用的,适用于任何值类型。因此,您甚至可以在非String对象上调用这些函数。这样做将暗示在改变所得字符串值中每个字符的大小写之前自动转换为字符串值。例如,您可以像这样直接在日期上应用 toLowerCase
var lower = String.prototype.toLowerCase.apply(new Date());

并且这与以下内容基本相同:

var lower = new Date().toString().toLowerCase();

第二种形式通常更受欢迎,因为它更简单易读。在早期的IE版本中,第一种形式的好处是可以使用null值。对于null应用toLowerCasetoLocaleLowerCase的结果将产生null(而不是错误条件)。

关于 String.prototype.toLowerCase.apply(null) 返回 null 的部分似乎不正确。当我尝试时,它会抛出一个 TypeError 异常。 - JohnnyHK
2
@JohnnyHK 你说得对。在早期版本的IE中,这一点确实是正确的,因为当时回答被测试过。我已经更新了答案以反映您的反馈。谢谢。 - Atif Aziz

31

是的,JavaScript 中的任何字符串都有一个 toLowerCase() 方法,它将返回一个新字符串,该字符串为所有小写的旧字符串。旧字符串将保持不变。

因此,你可以这样做:

"Foo".toLowerCase();
document.getElementById('myField').value.toLowerCase();

21

toLocaleUpperCase() 或 toLowerCase() 函数的行为不像预期。例如,在我的系统上,使用 Safari 4、Chrome 4 Beta 和 Firefox 3.5.x 时,它们将带有土耳其字符的字符串转换错误。这些浏览器分别将 navigator.language 响应为 "en-US"、"tr"、"en-US"。

但是,据我所知,并没有任何方法可以在浏览器中获取用户的 Accept-Lang 设置。

尽管我已经将每个浏览器配置为 tr-TR 区域设置首选项,但只有 Chrome 给了我麻烦。我认为这些设置仅影响 HTTP 标头,但我们无法通过 JavaScript 访问这些设置。

Mozilla 文档中,它说:“字符串中的字符会被转换为...,同时考虑当前环境的区域设置。对于大多数语言来说,这将返回与...相同的结果。” 我认为这对土耳其语是有效的,而且无论配置为en还是tr,都不会有差异。

在土耳其语中,它应该将“DİNÇ”转换为“dinç”,将“DINÇ”转换为“dınç”,或者反之。


1
Accept-Languagenavigator.language是两个完全独立的设置。Accept-Language反映了用户选择的 Web 页面语言偏好(不幸的是,此设置对 JS 不可用)。navigator.language仅反映安装的 Web 浏览器的本地化版本,通常不应用于任何事情。这两个值与系统区域设置无关,后者决定toLocaleLowerCase()的操作;这是超出浏览器首选项范围的操作系统级别设置。 - bobince
我认为Accept-Language和navigator.language应该有某种关联。您可以通过浏览器的设置屏幕来配置默认语言,但是您无法配置navigator.language应该如何响应。我认为应该有另一种形式的函数toLowerCase(),它接受一个区域参数。 - sanilunlu
是的,确实应该有。不幸的是,JavaScript中与本地化相关的功能较弱,规范不明确且通常不可靠。 - bobince

17
仅为演示toLowerCase()toUpperCase()和尚未推出的toTitleCase()toProperCase()的原型而设的示例:

String.prototype.toTitleCase = function() {
  return this.split(' ').map(i => i[0].toUpperCase() + i.substring(1).toLowerCase()).join(' ');
}

String.prototype.toPropperCase = function() {
  return this.toTitleCase();
}

var OriginalCase = 'Your Name';
var lowercase = OriginalCase.toLowerCase();
var upperCase = lowercase.toUpperCase();
var titleCase = upperCase.toTitleCase();

console.log('Original: ' + OriginalCase);
console.log('toLowerCase(): ' + lowercase);
console.log('toUpperCase(): ' + upperCase);
console.log('toTitleCase(): ' + titleCase);


3
这段代码在处理非ASCII字符时容易出错。例如,使用德语输入“die Straße”时,你会得到“Die Strasse”作为标题格式,而正确的应该是“Die Straße”。除此之外,原型污染现在已经不被推荐使用。 - ComFreek
@ComFreek 可能在过去它可能存在故障,但是现在它在 node V17chrome V104 上运行得相当不错。 - polendina

13

我注意到很多人在JavaScript中寻找strtolower()。他们期望与其他语言中的函数名称相同,这就是为什么有了这篇文章。

我建议使用一个本地的JavaScript函数:

"SomE StriNg".toLowerCase()

以下是与PHP的函数完全相同的函数(对于那些将PHP代码移植到JavaScript的人)

function strToLower (str) {
    return String(str).toLowerCase();
}

9

方法或函数:toLowerCase()和toUpperCase()

描述:这些方法用于将字符串或字母从小写转换为大写或反之。例如,"and"转换为"AND"。

转换为大写:

示例代码:

<script language=javascript>
    var ss = " testing case conversion method ";
    var result = ss.toUpperCase();
    document.write(result);
</script>

结果:测试用例转换方法

转换为小写字母:

示例代码:

<script language=javascript>
    var ss = " TESTING LOWERCASE CONVERT FUNCTION ";
    var result = ss.toLowerCase();
    document.write(result);
</script>

结果:测试小写转换函数

解释:在上面的例子中,

  • toUpperCase() 方法将任何字符串转换为 "UPPER" 大写字母。

  • toLowerCase() 方法将任何字符串转换为 "lower" 小写字母。


8

请注意,此函数仅适用于字符串对象。

例如,我正在使用一个插件,并且很困惑为什么会收到“extension.tolowercase不是函数”的JavaScript错误。

 onChange: function(file, extension)
    {
      alert("extension.toLowerCase()=>" + extension.toLowerCase() + "<=");

出现了错误"extension.toLowerCase不是一个函数"。所以我尝试了这段代码,发现了问题!

alert("(typeof extension)=>" + (typeof extension) + "<=");;

输出结果是“(typeof extension)=>object<=” - 所以我没有得到一个字符串变量作为我的输入。不过修复很简单 - 只需将该死的东西强制转换为字符串即可!
var extension = String(extension);

在转换后,extension.toLowerCase() 函数可以正常工作。


4

选项1:使用 toLowerCase()

var x = 'ABC';
x = x.toLowerCase();

选项2:使用自己的函数
function convertToLowerCase(str) {
  var result = '';

  for (var i = 0; i < str.length; i++) {
    var code = str.charCodeAt(i);
    if (code > 64 && code < 91) {
      result += String.fromCharCode(code + 32);
    } else {
      result += str.charAt(i);
    }
  }
  return result;
}

称其为:

x = convertToLowerCase(x);

1
第一个选项已经在其他答案中提到,第二个选项对于所有非ASCII字符都失败了。 - ComFreek

3

只需使用JS的toLowerCase()函数即可。
let v = "Your Name" let u = v.toLowerCase(); 或者
let u = "Your Name".toLowerCase();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接