Bagaimana saya bisa menguji apakah huruf dalam string adalah huruf besar atau kecil menggunakan JavaScript?
javascript
Joe
sumber
sumber
[:upper:]
) cepat dan sangat keren kecuali itu tidak berfungsi, lihat komentar saya di bawah ini dan jsperf.com/isupper-comparison/7 yang diperbaiki .str == str.toUpperCase();
mengembalikan benar atau salahJawaban:
Jawaban oleh josh dan maleki akan mengembalikan true pada huruf besar dan kecil jika karakter atau seluruh string adalah angka. menjadikan hasilnya hasil yang salah. contoh menggunakan josh
Cara lain adalah dengan mengujinya terlebih dahulu apakah itu numerik, atau mengujinya jika contoh huruf besar atau kecil
sumber
!
adalah angka.var character='';
sumber
Ini akan masuk log benar jika karakter huruf besar, dan masuk palsu dalam setiap kasus lain:
Anda dapat mengujinya di sini: http://jsfiddle.net/Axfxz/ (gunakan Firebug atau sth).
dan ini untuk huruf kecil :).
sumber
Masalah dengan jawaban lain adalah, bahwa beberapa karakter seperti angka atau tanda baca juga mengembalikan true ketika diperiksa untuk huruf kecil / huruf besar.
Saya menemukan ini bekerja sangat baik untuk itu:
Ini akan berfungsi untuk tanda baca, angka, dan huruf:
Untuk memeriksa satu huruf, panggil saja menggunakan
isLowerCase(str[charIndex])
sumber
kemudian :
sumber
Anda dapat menggunakan tes ekspresi reguler dan
toUpperCase
metode:Lihat juga
sumber
&& chr === chr.toUpperCase();
??\u0080-\u024F
mungkin berisi diakritik huruf kecil, jadi tes juga harus memeriksa karakter itu sendiri.sumber
Lebih khusus untuk apa yang diminta. Mengirimkan String dan posisi untuk memeriksa. Sangat dekat dengan Josh kecuali yang ini akan membandingkan string yang lebih besar. Akan ditambahkan sebagai komentar tetapi saya belum memiliki kemampuan itu.
sumber
Anda juga dapat menggunakan ekspresi reguler untuk secara eksplisit mendeteksi huruf alfabet roman huruf besar.
EDIT: fungsi di atas adalah benar untuk ASCII / Basic Latin Unicode, yang mungkin semua yang akan Anda pedulikan. Versi berikut juga mendukung Suplemen Latin-1 dan blok Unicode Yunani dan Koptik ... Jika Anda memerlukannya karena alasan tertentu.
Strategi ini mulai jatuh jika Anda memerlukan dukungan lebih lanjut (apakah Ѭ huruf besar?) Karena beberapa blok memadukan karakter huruf besar dan kecil.
sumber
.toLowerCase()
atau.toUpperCase()
lebih disukai, karena mereka mendukung sebagian besar lokal secara internal.Jawaban yang baik untuk pertanyaan ini harus ringkas, menangani unicode dengan benar, dan menangani string kosong dan null.
Pendekatan ini berkaitan dengan string kosong dan nol pertama, kemudian memastikan bahwa mengubah string yang diberikan ke huruf kecil mengubah kesetaraannya. Ini memastikan bahwa string berisi setidaknya satu huruf kapital sesuai dengan aturan kapitalisasi lokal saat ini (dan tidak akan mengembalikan positif palsu untuk angka dan mesin terbang lain yang tidak memiliki kapitalisasi).
Pertanyaan asli ditanyakan secara khusus tentang pengujian karakter pertama. Untuk menjaga kode Anda tetap sederhana dan jelas, saya akan memisahkan karakter pertama dari string secara terpisah dari pengujian apakah huruf besar.
sumber
Ada jawaban yang sangat sederhana, yang tidak disebutkan orang lain:
Jika
str.toUpperCase()
tidak mengembalikan yang samastr
, itu harus huruf kecil. Untuk menguji huruf besar Anda mengubahnya menjadistr !== str.toLowererCase()
.Tidak seperti beberapa jawaban lain, ia bekerja dengan benar pada karakter non-alfa (kembali
false
) dan berfungsi untuk huruf lain, karakter beraksen, dll.sumber
"É"
bukan huruf kecil.sumber
return (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90)
.Cara terbaik adalah dengan menggunakan ekspresi reguler, operator ternary, dan
.test()
metode bawaan untuk string.Saya meninggalkan Anda di Google seluk beluk ekspresi reguler dan metode pengujian untuk string (mudah ditemukan), tetapi di sini kami akan menggunakannya untuk menguji variabel Anda.
Ini akan mengembalikan TRUE of FALSE berdasarkan pada apakah karakter Anda cocok atau tidak dengan karakter yang ditetapkan dalam ekspresi reguler. Ekspresi reguler kami memeriksa semua huruf az
/[a-z]/
terlepas dari kasusnya berkati
benderanya.Jadi, tes dasar adalah:
Sekarang kita perlu menentukan apakah huruf besar atau kecil. Jadi, jika kita menghapus
i
flag dari ekspresi reguler kita, maka kode kita di atas akan menguji huruf kecil az. Dan jika kita menempelif
pernyataan lain dalam pernyataanelse
pertamaif
kita, kita dapat menguji huruf besar juga dengan menggunakan AZ. Seperti ini:Dan kalau-kalau itu bukan surat, kita bisa menambahkan pernyataan final lain:
Kode di atas akan berfungsi. Tapi itu agak jelek. Sebagai gantinya, kami dapat menggunakan "operator ternary" untuk menggantikan
if-else
pernyataan kami di atas. Operator ternary hanyalah cara sederhana untuk mengkode suatuif-else
. Sintaksnya mudah:Dan ini juga bisa saling bersarang. Jadi fungsi mungkin terlihat seperti:
Kode di atas terlihat bagus, tetapi tidak akan bekerja dengan baik, karena jika karakter kita adalah huruf kecil,
theAnswer
disetel ke "" ketika diuji untuk huruf besar, jadi mari kita buat sarangnya:Itu akan berhasil! Tetapi tidak perlu memiliki dua baris terpisah untuk mengatur variabel
theAnswer
dan kemudian mengembalikannya. Dan kita harus menggunakanlet
danconst
bukannyavar
(cari itu jika Anda tidak yakin mengapa). Setelah kami melakukan perubahan itu:Dan kita berakhir dengan sepotong kode yang elegan dan ringkas. ;)
sumber
Ini adalah solusi mudah dan mudah dibaca menggunakan regex sederhana.
sumber
Anda dapat menguji apakah array Anda memiliki string huruf besar atau kecil dengan menggunakan metode kecocokan dan regex, di bawah ini hanya fondasi dasar untuk memulai pengujian Anda
sumber
Anda juga dapat menggunakan ini, ini akan memeriksa string untuk huruf kecil dan besar
sumber
Ini memeriksa SELURUH string, bukan hanya huruf pertama. Saya pikir saya akan membaginya dengan semua orang di sini.
Berikut adalah fungsi yang menggunakan ekspresi reguler untuk menguji huruf-huruf string; mengembalikan true jika hurufnya adalah huruf besar (AZ). Kami kemudian mengurangi array benar / salah menjadi nilai tunggal. Jika sama dengan panjang string, itu berarti semua huruf lulus tes regex, yang berarti string huruf besar. Jika tidak, string adalah huruf kecil.
sumber
Inilah yang saya lakukan baru-baru ini:
1) Pastikan char / string dalam
s
huruf kecils.toLowerCase() == s && s.toUpperCase() != s
2) Periksa
s
huruf besars.toUpperCase() == s && s.toLowerCase() != s
Meliputi case yang
s
berisi karakter non-alfabet dan diakritik.sumber
Tentukan Fungsi checkCharType (). Dengan mendeklarasikan variabel returnValue dan menginisialisasi ke Karakter "O" untuk menunjukkan itu Beberapa nilai lainnya.
U untuk huruf besar; L untuk Huruf Kecil; N untuk angka
Gunakan metode charCodeAt () untuk mendapatkan kode karakter dari karakter pertama.
Menggunakan if Statement, yang memeriksa dalam kisaran nilai apa kode karakter jatuh.
Jika berada di antara kode karakter untuk A dan Z, Huruf Besarnya, kode karakter antara a dan z, Huruf Kecilnya. dan seterusnya.
"A" .charCode (0)
var myChar = new String ("A"); myChar.charCodeAt (0); "A": kode angka "65"
sumber
Pertanyaan ini jelas telah dijawab beberapa kali, tetapi saya pikir saya akan membagikan solusi saya karena saya belum melihatnya dalam jawaban yang diberikan.
2 ¢
sumber
Lihat komentar saya pada jawaban yang dipilih. Solusi lain yang membatasi tabel ASCII atau menggunakan literal karakter aktual sepenuhnya mengabaikan Unicode dan beberapa ratus karakter lain di sana yang memiliki case.
Kode ini akan mengatur variabel caseGroup ke:
0 untuk Tanpa Kasus
Anda bisa memanggang itu menjadi sesuatu seperti ini ...
sumber
Berdasarkan komentar Sonic Beard untuk jawaban utama. Saya mengubah logika di hasilnya:
0: Huruf kecil
1: Huruf besar
-1: keduanya
sumber
Cara lain adalah membandingkan karakter dengan objek kosong, saya tidak benar-benar tahu mengapa ia bekerja, tetapi ia bekerja:
jadi dalam suatu fungsi:
EDIT : itu tidak bekerja dengan aksen dan diakritik, jadi mungkin untuk menghapusnya
sumber
[object Object]
. Anda pada dasarnya memeriksa apakah kode karakter surat itu datang sebelumnya[
. Karena kode karakter masingZ, [, a
-90, 91, 97
masing, perbandingannya benar untuk huruf besar dan palsu untuk huruf kecil. Dengan kata lain, ini adalah cara yang sama-sama hacky untuk melakukannya dengan menggunakan nomor base-36 untuk mendapatkan huruf-huruf alfabet.character.normalize("NFD").replace(/[\u0300-\u036f]/g
Dengan asumsi bahwa string hanya dianggap tidak semua huruf besar jika setidaknya ada satu huruf kecil, ini berfungsi dengan baik. Saya mengerti ini tidak ringkas dan ringkas seperti yang orang lain coba lakukan, tetapi berfungsi =)
sumber
Satu saya menggunakan (perhatikan ini tidak membuat "TestString" sebagai "T est String" atau "Test String").
sumber
Saya perlu menguji string karakter apa pun (termasuk spasi, tanda, angka, karakter unicode ...). Karena spasi putih, angka, tanda ... akan sama dalam huruf besar dan kecil, dan saya ingin menemukan huruf besar nyata, saya melakukan ini:
sumber
Cukup periksa nilai ASCII
sumber
Fungsi Stephen Nelsons dikonversi ke prototipe dengan banyak contoh uji.
Saya juga menambahkan seluruh string ke fungsi untuk kelengkapan.
Lihat kode untuk komentar tambahan.
sumber
sumber
sumber