Saya telah melihat Stack Overflow ( mengganti karakter .. eh , bagaimana JavaScript tidak mengikuti standar Unicode tentang RegExp , dll.) Dan belum benar-benar menemukan jawaban konkret untuk pertanyaan:
How can JavaScript match for accented characters (those with diacritical marks)?
Saya memaksa sebuah bidang di UI agar sesuai dengan format: last_name, first_name
(terakhir [koma spasi] pertama) , dan saya ingin memberikan dukungan untuk diakritik, tetapi jelas dalam JavaScript itu sedikit lebih sulit daripada bahasa / platform lain.
Ini adalah versi asli saya, sampai saya ingin menambahkan dukungan diakritik:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
Saat ini saya sedang memperdebatkan satu dari tiga metode untuk menambah dukungan, yang semuanya telah saya uji dan bekerja (setidaknya sampai batas tertentu, saya tidak benar-benar tahu apa "tingkat" dari pendekatan kedua). Di sini mereka:
Secara eksplisit mendaftar semua karakter beraksen yang ingin saya terima valid (lumpuh dan terlalu rumit):
var accentedCharacters = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";
// Build the full regex
var regex = "^[a-zA-Z" + accentedCharacters + "]+,\\s[a-zA-Z" + accentedCharacters + "]+$";
// Create a RegExp from the string version
regexCompiled = new RegExp(regex);
// regexCompiled = /^[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+,\s[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- Ini dengan benar mencocokkan nama belakang / depan dengan salah satu karakter beraksen yang didukung di
accentedCharacters
.
Pendekatan saya yang lain adalah menggunakan .
kelas karakter, untuk memiliki ekspresi yang lebih sederhana:
var regex = /^.+,\s.+$/;
- Ini akan cocok untuk apa saja, setidaknya dalam bentuk:
something, something
. Saya kira tidak apa-apa ...
Pendekatan terakhir, yang baru saja saya temukan mungkin lebih sederhana ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Ini cocok dengan berbagai karakter unicode - diuji dan bekerja, meskipun saya tidak mencoba sesuatu yang gila, hanya hal-hal normal yang saya lihat di departemen bahasa kami untuk nama anggota fakultas.
Inilah kekhawatiran saya:
- Solusi pertama terlalu terbatas, dan ceroboh dan berbelit-belit pada saat itu. Itu perlu diubah jika saya lupa satu atau dua karakter, dan itu tidak terlalu praktis.
- Solusi kedua lebih baik, ringkas, tetapi mungkin lebih cocok daripada yang seharusnya. Saya tidak bisa menemukan dokumentasi nyata pada persis apa yang
.
cocok, hanya generalisasi "karakter apapun kecuali karakter baris baru" (dari meja di MDN ). Solusi ketiga tampaknya menjadi yang paling tepat, tetapi apakah ada gotcha? Saya tidak terlalu akrab dengan Unicode, setidaknya dalam prakteknya, tetapi melihat tabel kode / kelanjutan dari tabel itu ,
\u00C0-\u017F
tampaknya cukup solid, setidaknya untuk input yang saya harapkan.- Fakultas tidak akan mengirimkan formulir dengan nama mereka dalam bahasa asli mereka (misalnya, Arab, Cina, Jepang, dll.) Jadi saya tidak perlu khawatir tentang karakter yang tidak sesuai dengan karakter Latin
Jadi pertanyaan sebenarnya : Manakah dari tiga pendekatan ini yang paling cocok untuk tugas itu? Atau adakah solusi yang lebih baik?
regex = /^[^,]+,\s[^,]+$/;
untuk mencegahnya.