Untuk tujuan validasi situs web, saya memerlukan validasi nama depan dan nama belakang.
Nama depan hanya boleh berisi huruf, boleh beberapa kata dengan spasi, dan memiliki minimal tiga karakter, namun maksimal 30 karakter teratas. String kosong tidak boleh divalidasi (mis. Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith , dan jason SMITH ).
Untuk nama belakang, harus satu kata, hanya huruf, dengan setidaknya tiga karakter, tetapi maksimal 30 karakter. String kosong tidak boleh divalidasi (misalnya lazslo , Lazslo , dan LAZSLO ).
regex
validation
Hellnar
sumber
sumber
Jawaban:
Jangan lupakan nama-nama seperti:
Ini seharusnya melakukan trik untuk banyak hal:
/^[a-z ,.'-]+$/i
ATAU Dukung nama internasional dengan unicode super manis:
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
sumber
.
(titik desimal / titik / titik) karena ini adalah wildcard regexp =)őŐűŰ
hilang, karakter PolandiałŁ
juga, belum lagi sejumlah karakter Lithuania dan Latvia. Alih-alih, cobalah mencari pustaka yang mengubah karakter eksotis menjadi versi tanpa aksen yang sesuai, lalu tulis/^[a-z ,.'-]+$/i
regexp.陳大文
bukankah nama yang valid di sini?/^[\p{L}'][ \p{L}'-]*[\p{L}]$/u
, betapapun cukup memaafkan.Anda membuat asumsi yang salah tentang format nama depan dan belakang. Mungkin lebih baik untuk tidak memvalidasi nama sama sekali, selain memeriksa bahwa namanya kosong.
sumber
Setelah melalui semua jawaban ini, saya menemukan cara untuk membangun regex kecil yang mendukung sebagian besar bahasa dan hanya memungkinkan untuk karakter kata. Bahkan mendukung beberapa karakter khusus seperti tanda hubung, spasi, dan apostrof. Saya telah menguji dengan python dan mendukung karakter di bawah ini:
Karakter yang didukung:
sumber
^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
Saya telah membuat regex kustom untuk menangani nama:
Saya telah mencoba jenis nama ini dan ternyata bekerja dengan sempurna
RegEx saya terlihat seperti ini:
Model MVC4:
Harap perhatikan ganda
\\
untuk karakter melarikan diriBagi Anda yang baru mengenal RegEx saya pikir saya akan menyertakan penjelasan.
sumber
Saya telah mencari dan mencari dan bermain dan bermain dengannya dan meskipun tidak sempurna, ini dapat membantu orang lain mencoba untuk memvalidasi nama depan dan belakang yang telah disediakan sebagai satu variabel.
Dalam kasus saya, variabel itu adalah $ name.
Saya menggunakan kode berikut untuk PHP saya:
Saya belajar RegEx sendiri tetapi saya memiliki penjelasan untuk kode yang diberikan oleh sobat RegEx.
Ini dia:
Tegaskan posisi di batas kata «\ b»
Cocokkan ekspresi reguler di bawah dan tangkap kecocokannya menjadi referensi nomor 1
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [- \ '] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [- \ '] {1} [AZ] {1} [ az] {1,30}) {2,5} »
Antara 2 dan 5 kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{2,5}»
* SAYA PERLU BANTUAN DI SINI DENGAN MEMAHAMI RAMIFIKASI CATATAN INI *
Catatan: Saya mengulangi grup penangkap itu sendiri. Grup hanya akan menangkap iterasi terakhir. Tempatkan grup penangkap di sekitar grup berulang untuk menangkap semua iterasi. «{2,5}»
Cocokkan ekspresi reguler di bawah ini (mencoba alternatif berikutnya hanya jika yang ini gagal) «[AZ] {1} [az] {1,30} [-] {0,1}»
Cocokkan satu karakter dalam rentang antara "A" dan "Z" «[AZ] {1}»
Tepat 1 kali «{1}»
Cocokkan satu karakter dalam rentang antara "a" dan "z" «[az] {1,30}»
Antara satu dan 30 kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{1,30}»
Cocokkan satu karakter yang ada dalam daftar “-” «[-] {0,1}»
Antara nol dan satu kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{0,1}»
Atau cocokkan ekspresi reguler nomor 2 di bawah (mencoba alternatif berikutnya hanya jika yang ini gagal) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Cocokkan satu karakter dalam rentang antara "A" dan "Z" «[AZ] {1}»
Tepat 1 kali «{1}»
Cocokkan satu karakter yang ada dalam daftar di bawah «[- \ '] {1}»
Tepat 1 kali «{1}»
Salah satu karakter “-” «-» A 'character «\'»
Cocokkan satu karakter dalam rentang antara "A" dan "Z" «[AZ] {0,1}»
Antara nol dan satu kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{0,1}»
Cocokkan satu karakter dalam rentang antara "a" dan "z" «[az] {1,30}»
Antara satu dan 30 kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{1,30}»
Cocokkan satu karakter yang ada dalam daftar “-” «[-] {0,1}»
Antara nol dan satu kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{0,1}»
Atau cocokkan ekspresi reguler nomor 3 di bawah (seluruh grup gagal jika ini gagal untuk mencocokkan) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Cocokkan satu karakter dalam rentang antara "a" dan "z" «[az] {1,2}»
Antara satu dan 2 kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{1,2}»
Cocokkan satu karakter dalam rentang antara "" dan "'" «[- \'] {1}»
Tepat 1 kali «{1}»
Cocokkan satu karakter dalam rentang antara "A" dan "Z" «[AZ] {1}»
Tepat 1 kali «{1}»
Cocokkan satu karakter dalam rentang antara "a" dan "z" «[az] {1,30}»
Antara satu dan 30 kali, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah) «{1,30}»
Saya tahu validasi ini secara total mengasumsikan bahwa setiap orang yang mengisi formulir memiliki nama barat dan itu mungkin menghilangkan sebagian besar orang di dunia. Namun, saya merasa ini adalah langkah ke arah yang benar. Mungkin ekspresi reguler ini terlalu mendasar untuk diatasi oleh para guru secara sederhana atau mungkin ada beberapa alasan lain mengapa saya tidak dapat menemukan kode di atas dalam pencarian saya. Saya menghabiskan waktu terlalu lama untuk mencoba memahami hal ini, Anda mungkin akan memperhatikan betapa berkabutnya pikiran saya tentang semua ini jika Anda melihat nama tes saya di bawah ini.
Saya menguji kode pada nama-nama berikut dan hasilnya ada di dalam tanda kurung di sebelah kanan setiap nama.
Jika Anda memiliki nama dasar, harus ada lebih dari satu hingga lima agar kode di atas berfungsi, yang mirip dengan yang saya gunakan selama pengujian, kode ini mungkin cocok untuk Anda.
Jika Anda memiliki peningkatan, beri tahu saya. Saya baru dalam tahap awal (beberapa bulan pertama mencari tahu RegEx.
Terima kasih dan semoga berhasil, Steve
sumber
Nama depan adalah
Jika Anda memerlukan seluruh bagian nama depan lebih pendek dari 30 huruf, Anda perlu memeriksanya secara terpisah, saya kira. Ekspresi
".{3,30}"
harus melakukan itu.Persyaratan nama belakang Anda akan diterjemahkan menjadi
tetapi Anda harus memeriksa ini. Ada banyak nama belakang yang mengandung spasi.
sumber
Seperti yang dikatakan maček:
Jangan lupakan nama-nama seperti:
dan untuk menghapus kasus seperti:
Ini akan mencakup lebih banyak kasus:
sumber
Saya sedang mengerjakan aplikasi yang memvalidasi Paspor Internasional (ICAO). Kami hanya mendukung karakter bahasa Inggris. Meskipun sebagian besar karakter nasional asing dapat diwakili oleh karakter dalam alfabet Latin misalnya è oleh e, ada beberapa karakter nasional yang memerlukan huruf tambahan untuk mewakilinya seperti umlaut Jerman yang memerlukan 'e' untuk ditambahkan ke huruf tersebut. misalnya ä by ae.
Ini adalah Regex JavaScript untuk nama depan dan belakang yang kami gunakan:
Jumlah karakter maksimal pada paspor internasional hingga 31 . Kami menggunakan maxlength = "31" untuk pesan kesalahan kata yang lebih baik daripada memasukkannya ke regex.
Berikut adalah potongan dari kode kami di AngularJS 1.6 dengan penanganan bentuk dan kesalahan:
sumber
Saya menggunakan:
Dan uji maxlength menggunakan cara lain
sumber
Regex ini berfungsi untuk saya (digunakan di Angular 8):
Ini akan menjadi tidak valid jika ada: -
Contoh Nama Depan (spasi) tidak valid
Contoh Nama Depan yang valid:
sumber
Demi kesederhanaan, Anda dapat menggunakan:
Hal yang saya suka tentang ini adalah bahwa nama belakang selalu setelah nama depan, jadi jika Anda akan memasukkan grup yang cocok ini ke dalam database, dan namanya adalah John M. Smith, grup pertama adalah John M. , dan kelompok kedua adalah Smith.
sumber
^ menegaskan posisi di awal baris.
\ p {L} cocok dengan semua jenis huruf dari bahasa apapun
{2,} Quantifier - Cocok antara 2 dan waktu tidak terbatas, sebanyak mungkin, memberikan kembali sesuai kebutuhan (serakah)
$ menegaskan posisi di akhir baris
Jadi sebaiknya nama dalam bahasa apa pun yang mengandung setidaknya 2 huruf (atau simbol) tanpa angka atau karakter lain.
sumber
Jadi, dengan pelanggan kami membuat regex gila ini:
sumber
Untuk nama depan dan belakang hanya ada 2 hal yang harus Anda cari:
Ini ekspresi reguler saya:
var regex = /^[A-Za-z-,]{3,20}?=.*\d)/
1. Panjang
Di sini {3,20} membatasi panjang string antara 3 dan 20 karakter.
2. Konten
Informasi antara tanda kurung siku [A-Za-z] memungkinkan karakter huruf besar dan kecil. Semua simbol berikutnya (- ,.) juga diperbolehkan.
sumber
Ini yang saya gunakan.
Regex ini hanya menerima nama dengan karakter minimum, dari
A-Z a-z ,space and -
.Contoh nama:
Batas karakter nama adalah 3. Jika Anda ingin mengubahnya, ubah {3,} menjadi {6,}
sumber
Ekspresi berikut akan berfungsi pada bahasa apa pun yang didukung oleh UTF-16 dan akan memastikan bahwa ada minimal dua komponen pada nama (yaitu, depan + belakang), tetapi juga akan mengizinkan sejumlah nama tengah.
Pada saat penulisan ini, tampaknya tidak ada jawaban lain yang memenuhi semua kriteria itu. Even
^\p{L}{2,}$
, yang paling dekat, gagal karena juga akan cocok dengan karakter "tak terlihat", sepertiU+FEFF
(Zero Width No-Break Space).sumber
Coba solusi ini, untuk kompatibilitas maksimum, seperti yang telah saya posting di sini :
JavaScript:
var nm_re = /^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$/;
HTML5:
<input type="text" name="full_name" id="full_name" pattern="^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$" required>
sumber
Ini sepertinya berhasil untuk saya:
sumber
Fungsi sederhana menggunakan preg_match di php
sumber
Nama lengkap dengan hanya satu spasi:
sumber
Jika Anda ingin seluruh nama depan antara 3 dan 30 karakter tanpa batasan pada setiap kata, coba ini:
Berhati-hatilah karena itu mengecualikan semua huruf asing sebagai é, è, à, ï.
Jika Anda ingin batas 3 hingga 30 karakter diterapkan ke setiap kata, regexp Jens akan melakukan pekerjaan itu.
sumber
sumber