Как я могу проверить, является ли буква в строке прописными или строчными, используя JavaScript?
javascript
Джо
источник
источник
[:upper:]
) быстрая и очень крутая, за исключением того, что она не работает, см. Мой комментарий ниже и мой исправленный jsperf.com/isupper-comparison/7 .str == str.toUpperCase();
возвращает истину или ложьОтветы:
Ответ от josh и maleki вернет true в верхнем и нижнем регистре, если символ или вся строка числовые. делая результат ложным результатом. пример с использованием Джош
Другой способ - сначала проверить его, если он числовой, в противном случае проверить его, например, в верхнем или нижнем регистре.
источник
!
как цифры.var character='';
источник
Это будет записывать true, если символ является заглавной буквой, и записывать false в любом другом случае:
Вы можете проверить это здесь: http://jsfiddle.net/Axfxz/ (используйте Firebug или sth).
и это для строчных букв :).
источник
Проблема с другими ответами состоит в том, что некоторые символы, такие как цифры или знаки препинания, также возвращают true, когда проверяются на строчные и прописные буквы.
Я нашел, что это работает очень хорошо для этого:
Это будет работать для пунктуации, цифр и букв:
Чтобы проверить одно письмо, просто позвоните, используя
isLowerCase(str[charIndex])
источник
затем :
источник
Вы можете использовать тест регулярного выражения и
toUpperCase
метод:Смотрите также
источник
&& chr === chr.toUpperCase();
?\u0080-\u024F
может содержать диакритические знаки в нижнем регистре, поэтому тест должен также проверять сам символ.источник
Более конкретно к тому, что просят. Передайте строку и позицию для проверки. Очень близко к Джошу за исключением того, что этот будет сравнивать большую строку. Добавил бы в качестве комментария, но у меня пока нет этой способности.
источник
Вы также можете использовать регулярное выражение для явного определения прописных букв латинского алфавита.
РЕДАКТИРОВАТЬ: вышеупомянутая функция подходит для ASCII / Basic Latin Unicode, который, вероятно, все, что вам когда-либо будет интересно. Следующая версия также поддерживает блоки Latin-1 Supplement и Greek и Coptic Unicode ... На случай, если вам это понадобится по какой-то причине.
Эта стратегия начинает рушиться, если вам нужна дополнительная поддержка (в верхнем регистре?), Поскольку некоторые блоки смешивают символы верхнего и нижнего регистра.
источник
.toLowerCase()
или.toUpperCase()
является предпочтительным, так как они поддерживают большинство языков внутри страны.Хороший ответ на этот вопрос должен быть кратким, правильно обрабатывать юникод и иметь дело с пустыми строками и нулями.
Этот подход сначала работает с пустыми строками и нулями, а затем гарантирует, что преобразование данной строки в нижний регистр изменит ее равенство. Это гарантирует, что строка содержит по крайней мере одну заглавную букву в соответствии с текущими локальными правилами использования заглавных букв (и не будет возвращать ложные срабатывания для чисел и других глифов, которые не имеют заглавных букв).
Оригинальный вопрос, заданный специально о тестировании первого персонажа. Чтобы ваш код был простым и понятным, я бы выделил первый символ из строки отдельно от проверки, является ли это верхним регистром.
источник
Есть очень простой ответ, который никто не упомянул:
Если
str.toUpperCase()
не возвращает то же самоеstr
, это должно быть в нижнем регистре. Чтобы проверить верхний регистр, измените его наstr !== str.toLowererCase()
.В отличие от некоторых других ответов, он корректно работает с не-буквенными символами (возвращает
false
) и работает с другими алфавитами, символами с ударением и т. Д.источник
"É"
- не строчные.источник
return (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90)
.Лучший способ - использовать регулярное выражение, троичный оператор и встроенный
.test()
метод для строк.Я оставляю вам в Google все входы и выходы регулярных выражений и метод теста для строк (их легко найти), но здесь мы будем использовать его для проверки вашей переменной.
Это вернет TRUE of FALSE в зависимости от того, совпадает ли ваш символ с набором символов в регулярном выражении. Наше регулярное выражение проверяет все буквы az
/[a-z]/
независимо от их регистра благодаряi
флагу.Итак, базовый тест будет:
Теперь нам нужно определить, является ли он верхним или нижним регистром. Итак, если мы удалим
i
флаг из нашего регулярного выражения, то наш код выше будет проверять строчные буквы az. И если мы добавим еще одноif
утверждение вelse
нашем первомif
утверждении, мы можем проверить и верхний регистр, используя AZ. Как это:И на всякий случай, если это не буква, мы можем добавить еще одно утверждение:
Приведенный выше код будет работать. Но это некрасиво. Вместо этого мы можем использовать «троичный оператор» для замены наших
if-else
утверждений выше. Тернарные операторы являются просто краткими простыми способами кодированияif-else
. Синтаксис прост:И они тоже могут быть вложены друг в друга. Так что функция может выглядеть так:
Вышеприведенный код выглядит хорошо, но не совсем сработает, потому что, если наш символ в нижнем регистре,
theAnswer
при проверке на верхний регистр устанавливается значение «», поэтому давайте вложим их:Это будет отлично работать! Но нет необходимости иметь две отдельные строки для установки переменной
theAnswer
и ее возврата. И мы должны использоватьlet
иconst
вместоvar
(смотрите те, если вы не знаете , почему). Как только мы внесем эти изменения:И мы получаем элегантный, лаконичный кусок кода. ;)
источник
Это простое и понятное решение с использованием простого регулярного выражения.
источник
Вы можете проверить, есть ли в вашем массиве строка в верхнем или нижнем регистре, используя метод match и регулярное выражение, ниже приведено лишь базовое основание для начала вашего теста
источник
Вы также можете использовать это, он проверит строку для строчных и прописных букв
источник
Это проверяет ВСЮ строку, а не только первую букву. Я думал, что поделюсь этим со всеми здесь.
Вот функция, которая использует регулярное выражение для проверки букв строки; он возвращает истину, если буква заглавная (AZ). Затем мы уменьшаем массив true / false до одного значения. Если она равна длине строки, это означает, что все буквы прошли тест регулярного выражения, что означает, что строка является заглавной. Если нет, строка в нижнем регистре.
источник
Вот как я это сделал недавно:
1) Убедитесь, что символ / строка
s
строчныеs.toLowerCase() == s && s.toUpperCase() != s
2) Проверьте
s
прописными буквамиs.toUpperCase() == s && s.toLowerCase() != s
Охватывает случаи, когда
s
содержит неалфавитные символы и диакритические знаки.источник
Определите функцию checkCharType (). Объявляя переменную returnValue и инициализируя ее символом «O», чтобы указать, что это какое-то другое значение.
U в верхнем регистре; L для строчных букв; N для числа
Используйте метод charCodeAt (), чтобы получить код символа первого символа.
Использование оператора if, который проверяет, в какой диапазон значений попадает код символа.
Если он находится между кодами символов для A и Z, его заглавными буквами, код символа между a и z, его строчными буквами. и так далее.
"А" .charCode (0)
var myChar = new String ("A"); myChar.charCodeAt (0); «А»: цифровой код «65»
источник
На этот вопрос явно отвечали несколько раз, но я подумал, что поделюсь своим решением, поскольку я не видел его в данных ответах.
2 ¢
источник
Смотрите мой комментарий по выбранному ответу. Другие решения, которые ограничивают таблицу ASCII или используют фактические символьные литералы, полностью игнорируют Unicode и несколько сотен других символов, которые имеют регистр.
Этот код установит для переменной caseGroup значение:
0 для без дела
Вы можете испечь это в нечто вроде этого ...
источник
На основании комментария Sonic Beard к основному ответу. Я изменил логику в результате:
0: строчные
1: прописные буквы
-1: ни
источник
Другой способ - сравнить персонажа с пустым объектом, я не знаю, почему он работает, но он работает:
так в функции:
РЕДАКТИРОВАТЬ : он не работает с акцентами и диакритическими знаками, поэтому его можно удалить
источник
[object Object]
. Вы в основном проверяете, стоит ли код символа буквы раньше[
. Поскольку коды символов для соответственноZ, [, a
равны90, 91, 97
, сравнение верно для прописных букв и ложно для строчных. Другими словами, это такой же хакерский способ сделать это, как использовать цифры base-36 для получения букв алфавита.character.normalize("NFD").replace(/[\u0300-\u036f]/g
Предполагая, что строка считается не полностью заглавной, если присутствует хотя бы одна строчная буква, это работает нормально. Я понимаю, что это не лаконично и лаконично, как все остальные пытались сделать, но работает ли это =)
источник
Один я использую (обратите внимание, что это не делает "TestString" как "Tstst String" или "Test String").
источник
Мне нужно проверить строку любого символа (включая пробелы, знаки, цифры, символы Юникода ...). Поскольку пробелы, цифры, метки ... будут одинаковыми как в верхнем, так и в нижнем регистре, и я хочу найти настоящие буквы в верхнем регистре, я делаю это:
источник
Просто проверьте значение ASCII
источник
Стивен НельсонсФункция преобразована в прототип с множеством тестовых примеров.
Я также добавил целые строки в функцию для полноты.
Смотрите код для дополнительных комментариев.
источник
источник
источник