2017-02-07 12 views
-2

Как я могу использовать слово в словах без использования .toUpperCase() ... string.prototype.capitalize или Regex?Как я могу использовать заглавные буквы без использования toUpperCase

Только первая буква слова.

у меня есть это, и отлично работает:

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

Но я не хочу использовать .toUpperCase().

PD: используйте только JS, а не CSS.

Спасибо.

+1

w шляпа нужна? –

+0

может использовать текстовое преобразование: заглавные буквы через css –

+0

@PranavCBalan только что изучает – AlvaroGlez

ответ

3

Вы можете использовать fromCharCode и charCodeAt для переключения между нижним и верхним письмом:

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") 
 
);

+0

Черт, избили меня. Твой более элегантный, так или иначе, – Jazcash

+0

@ibrahimmahrir. Он выведет 'Hello, я родился в 90-х годах !!!', как вы, наверное, уже знаете. –

+0

Да, извините за редактирование, которое я тестировал, и нажал кнопку по ошибке. Ваш код не будет работать, если строка начинается с цифр! Используйте это: '90-е дети!'! –

0

Используя метод String#replace, получите всю первую букву слова с помощью границы слова и запишите в обратном вызове с использованием метода String#toUpperCase.

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


FYI: Без String#toUpperCase метода может быть сложнее, и это безумие.

+1

Согласитесь с точкой безумия! –

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

Вы должны объяснить, как работает ваш код, как он ответит на вопрос и какие недостатки он может иметь, например. не надлежащим образом капитализируя действительные символы букв, отличных от ASCII, и обычно имеют неопределенное поведение для чего-либо, кроме символов ASCII в нижнем регистре. – Flygenring

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 
+0

Как насчет 'Hello, world!'! –

+0

@ibrahimmahrir Обновлен ответ с помощью битового оператора –