如何在不使用toUpperCase的情况下进行大写

时间:2017-02-07 11:10:59

标签: javascript capitalize

如何在不使用.toUpperCase()... string.prototype.capitalize或Regex的情况下将单词大写?

只有单词的第一个字母。

我有这个,而且效果很好:



text.charAt(0).toUpperCase() + text.slice(1);




但我不想使用.toUpperCase()。

PD:只使用JS,而不是CSS。

感谢。

4 个答案:

答案 0 :(得分:3)

您可以使用fromCharCodecharCodeAt在字母大写和小写字母之间切换:



function capitalize(word) {
    var firstChar = word.charCodeAt(0);
    if (firstChar >= 97 && firstChar <= 122) {
        return String.fromCharCode(firstChar - 32) + word.substr(1);
    }
    return word;
}

alert(
    capitalize("abcd") + "\n" +
    capitalize("ABCD") + "\n" +
    capitalize("1bcd") + "\n" +
    capitalize("?bcd")
);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用String#replace方法在单词边界的帮助下获取单词的所有第一个字母,并使用String#toUpperCase方法在回调中大写。

&#13;
&#13;
console.log(
  'abc def ghij lkl'.replace(/\b\w/g, function(m) {
    return m.toUpperCase();
  })
)
&#13;
&#13;
&#13;

仅供参考:如果没有String#toUpperCase方法,可能会更难,而且很疯狂。

答案 2 :(得分:0)

function capitalise(word){
    let asciiRef = word.charCodeAt(0);
    let newAsciiRef = asciiRef - 32;
    let newChar = String.fromCharCode(newAsciiRef);
    return newChar + word.substr(1);
}

答案 3 :(得分:0)

取自asii case conversion trick

使用位运算符

检查以下实现

代码:

function toUpperCase(str) {
    var asciiCode = str.charCodeAt(0);
    if (asciiCode > 96 && asciiCode < 123) {
        // & ~(1 << 5) set the 6th bit to 1
        return String.fromCharCode(asciiCode & ~(1 << 5)) + str.slice(1);
    } else {
        return str;
    }
}

解释

  

要将小写字母转换为大写,我们可以xor第6位

如果您查看字符a..z,您会看到所有字符都将第6位设置为1.

a = 01100001    A = 01000001 
b = 01100010    B = 01000010 
c = 01100011    C = 01000011 
d = 01100100    D = 01000100 
e = 01100101    E = 01000101 
f = 01100110    F = 01000110 
g = 01100111    G = 01000111 
h = 01101000    H = 01001000 
i = 01101001    I = 01001001 
j = 01101010    J = 01001010 
k = 01101011    K = 01001011 
l = 01101100    L = 01001100 
m = 01101101    M = 01001101 
n = 01101110    N = 01001110 
o = 01101111    O = 01001111 
p = 01110000    P = 01010000 
q = 01110001    Q = 01010001 
r = 01110010    R = 01010010 
s = 01110011    S = 01010011 
t = 01110100    T = 01010100 
u = 01110101    U = 01010101 
v = 01110110    V = 01010110 
w = 01110111    W = 01010111 
x = 01111000    X = 01011000 
y = 01111001    Y = 01011001 
z = 01111010    Z = 01011010 
相关问题