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:
if (preg_match('/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
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.
- STEVE SMITH (gagal)
- Stev3 Smith (gagal)
- STeve Smith (gagal)
- Steve SMith (gagal)
- Steve Sm1th (meneruskan Steve Sm)
- d'Are to Beaware (diteruskan ke Are to Beaware)
- Jo Blow (lulus)
- Hyoung Kyoung Wu (lulus)
- Mike O'Neal (lulus)
- Steve Johnson-Smith (lulus)
- Jozef-Schmozev Hiemdel (lulus)
- O Henry Smith (lulus)
- Mathais d'Arras (lulus)
- Martin Luther King Jr (lulus)
- Downtown-James Brown (lulus)
- Darren McCarty (lulus)
- George De FunkMaster (lulus)
- Kurtis B-Ball Basketball (lulus)
- Ahmad el Jeffe (lulus)
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