【JS】检测大写字母 #字符串

本文介绍了一种算法,用于判断一个单词的大写使用是否符合特定规则,包括全大写、全小写或首字母大写的情况,并提供了两种实现方法,一种是通过Unicode编码判断,另一种是直接对比字符大小。

给定一个单词,你需要判断单词的大写使用是否正确。

我们定义,在以下情况时,单词的大写用法是正确的:

全部字母都是大写,比如"USA"。
单词中所有字母都不是大写,比如"leetcode"。
如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。
否则,我们定义这个单词没有正确使用大写字母。

示例 1:
输入: “USA”
输出: True

示例 2:
输入: “FlaG”
输出: False
注意: 输入是由大写和小写拉丁字母组成的非空单词。


解法一:

通过比较每个字符的Unicode编码进行判断,有以下几种情况
当第0位字符是小写,后面的字符也需要是小写, 如 w, word ,wORD
当第1位字符是小写,后面的字符也需要是小写, 如 h, character ,chAaracter
当第1位字符是大写,后面的字符也需要是大写。 如 P, UPPER ,UPper

  • A-Z 对应的 Unicode 编码是 65 - 90
  • a-z 对应的 Unicode 编码是 97 - 122
// 2018/11/22 上午
var detectCapitalUse = function(word) {
    var uni ,unizero ,unione
    for(var i=1;i<word.length;i++){
        uni = word.charCodeAt(i) 
        unizero=word.charCodeAt(0)
        unione=word.charCodeAt(1)
        if(unizero >= 97 && unizero <= 122){ //第0位小写,后面也需要小写
            if(uni < 97 || uni > 122){
                return false;
            }
        }else if(unione >= 97 && unione <= 122){ //第1位小写,后面也需要小写
            if(uni < 97 || uni > 122){
                return false;
            }
        }else{
            if(uni < 65 || uni > 90){ //否则都是大写
                return false;
            }
        }
    }
    return true;
};

550 / 550 个通过测试用例
执行用时:76 ms

解法二:

字符与字符之间对比大小


var detectCapitalUse = function(word) {
    for(var i=1;i<word.length;i++){
        if(word[0] >= 'a' && word[0] <= 'z'){ 
            if(word[i] < 'a' || word[i] > 'z'){
                return false;
            }
        }else if(word[1] >= 'a' && word[1] <= 'z'){ 
            if(word[i] < 'a' || word[i] > 'z'){
                return false;
            }
        }else{
            if(word[i] < 'A' || word[i] > 'Z'){ 
                return false;
            }
        }
    }
    return true;
};

550 / 550 个通过测试用例
执行用时:76 ms


PHP

<?php

function detectCapitalUse($word){
	for($i=1;$i<strlen($word);$i++){
		if( $word[0] >= 'a' && $word[0] <= 'z' ){
			if( $word[$i] >= 'a' && $word[$i] <='z' ){
			}else{
				return 0;
			}
		}else if( $word[1] >='a' && $word[1] <='z' ){
			if( $word[$i] >= 'a' && $word[$i] <= 'z' ){
			}else{
				return 0;
			}
		}else{
			if( $word[$i] >= 'A' && $word[$i] <= 'Z' ){
			}else{
				return 0;
			}
		}
	}
	return 1;
};
$words = 'Abcde';
$w=detectCapitalUse($words);
print_r($w);
<think> 首先,用户要求使用中文回答问题。问题是:“js 字符串首字母变为大写”,意思是“JavaScript中如何将字符串的首字母变为大写”。 我需要提供一个完整的回答。既然问题涉及JavaScript,我应该给出一个JavaScript代码示例来解决这个问题。 核心思路:在JavaScript中,要将字符串的首字母大写,我可以使用字符串的charAt(0)来获取第一个字符,然后使用toUpperCase()方法将其大写,再用slice(1)获取字符串的其余部分,最后将它们连接起来。 例如: - 输入:"hello" - 输出:"Hello" 代码示例: ```javascript function capitalizeFirstLetter(str) { return str.charAt(0).toUpperCase() + str.slice(1); } ``` 现在,回答完问题后,我必须根据用户的问题及我的回答提出3-5个相关问题。这些必须是“§§相关问题§§”,并且输出在回答的末尾,第一行必须是完整的“§§相关问题§§”,禁止换行分散。 相关问题应该基于原始问题和我的回答。可能的主题: 1. 如何处理空字符串或null/undefined? 2. 如何确保整个字符串的首字母大写,而不是每个单词(比如标题化)。 3. 如果字符串中有特殊字符或数字怎么办? 4. 是否有内置方法或库可以直接做这个? 5. 如何在数组中的所有字符串上应用这个? 生成3-5个相关的问题: 1. 如果字符串是空的或null,这个函数会怎么处理? 2. 如何将字符串中的每个单词的首字母都大写? 3. 这个方法对非英文字符(如中文或特殊符号)有效吗? 4. 有没有更简洁的方法在JavaScript中实现首字母大写? 5. 如何在TypeScript中使用这个功能? 确保问题数量在3-5个。 最后,输出格式: - 先给出回答。 - 然后输出“§§相关问题§§”在第一行。 - 接着列出问题,用数字点号(如1. ...)。 完整回答结构: 1. 解释如何做。 2. 提供代码示例。 3. 结束回答后,输出“§§相关问题§§”,然后列出问题。 代码示例需要用Markdown的代码块包裹。 用户的问题是“js 字符串首字母变为大写”,所以我的回答应该直接针对这个。 最终回答: - 开头:用中文解释。 - 代码示例:用JavaScript。 - 结束:输出相关问题。 确保所有内容用中文,因为用户指定“请使用中文回答问题”。 </think> 在 JavaScript 中,要将字符串的首字母变为大写,您可以创建一个自定义函数。基本思路是:使用 `charAt(0)` 获取字符串的第一个字符,并用 `toUpperCase()` 方法将其大写化,然后通过 `slice(1)` 获取剩余部分字符串,最后将它们连接起来。如果字符串为空或无效,需要添加错误处理以避免异常。 以下是代码示例: ```javascript function capitalizeFirstLetter(str) { if (typeof str !== &#39;string&#39; || str.length === 0) { return str; // 处理空字符串或非字符串输入 } return str.charAt(0).toUpperCase() + str.slice(1); } // 示例用法 console.log(capitalizeFirstLetter(&#39;hello&#39;)); // 输出: "Hello" console.log(capitalizeFirstLetter(&#39;world&#39;)); // 输出: "World" console.log(capitalizeFirstLetter(&#39;&#39;)); // 输出: "" (空字符串) ``` 此函数检查输入是否为有效字符串,并确保首字母大写,其余部分保持不变。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值