Saya mengalami masalah saat memeriksa di PHP jika nilainya adalah salah satu dari kombinasi berikut
- huruf (huruf besar atau kecil)
- angka (0-9)
- garis bawah (_)
- berlari (-)
- titik (.)
- tidak ada ruang! atau karakter lain
beberapa contoh:
- Oke: "screen123.css"
- Oke: "screen-new-file.css"
- Oke: "screen_new.js"
- TIDAK OK: "saring file baru.css"
Saya kira saya memerlukan regex untuk ini, karena saya perlu melempar kesalahan ketika string give memiliki karakter lain di dalamnya daripada yang disebutkan di atas.
Jawaban:
Pola yang Anda inginkan adalah sesuatu seperti ( lihat di rubular.com ):
^[a-zA-Z0-9_.-]*$
Penjelasan:
^
adalah awal dari jangkar baris$
adalah akhir dari jangkar baris[...]
adalah definisi kelas karakter*
adalah pengulangan "nol-atau-lebih"Perhatikan bahwa tanda hubung literal
-
adalah karakter terakhir dalam definisi kelas karakter, jika tidak maka memiliki arti yang berbeda (yaitu rentang). Itu.
juga memiliki arti yang berbeda di luar definisi kelas karakter, tetapi di dalamnya, itu hanya literal.
Referensi
Di PHP
Berikut cuplikan untuk menunjukkan bagaimana Anda dapat menggunakan pola ini:
<?php $arr = array( 'screen123.css', 'screen-new-file.css', 'screen_new.js', 'screen new file.css' ); foreach ($arr as $s) { if (preg_match('/^[\w.-]*$/', $s)) { print "$s is a match\n"; } else { print "$s is NO match!!!\n"; }; } ?>
Cetakan di atas ( seperti yang terlihat di ideone.com ):
screen123.css is a match screen-new-file.css is a match screen_new.js is a match screen new file.css is NO match!!!
Perhatikan bahwa polanya sedikit berbeda, gunakan
\w
sebagai gantinya. Ini adalah kelas karakter untuk "karakter kata".Referensi API
preg_match
Catatan tentang spesifikasi
Ini tampaknya mengikuti spesifikasi Anda, tetapi perhatikan bahwa ini akan cocok dengan hal-hal seperti
.....
, dll, yang mungkin atau mungkin tidak sesuai dengan keinginan Anda. Jika Anda bisa lebih spesifik pola apa yang ingin Anda cocokkan, ekspresi reguler akan sedikit lebih rumit.Regex di atas juga cocok dengan string kosong. Jika Anda membutuhkan setidaknya satu karakter, gunakan
+
(satu-atau-lebih) daripada*
(nol-atau-lebih) untuk pengulangan.Bagaimanapun, Anda dapat lebih memperjelas spesifikasi Anda (selalu membantu saat mengajukan pertanyaan regex), tetapi mudah-mudahan Anda juga dapat mempelajari cara menulis pola sendiri dengan informasi di atas.
sumber
^/([a-zA-Z0-9._-]*\.html)$
/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
false
literal string mentah yang kosong. Taman bermain . Gunakan solusi @ nonopolarity di bawah ini .kamu bisa memakai
^[\w\d_.-]+$
yang
+
adalah untuk memastikan ia memiliki setidaknya 1 karakter. Perlu^
dan$
untuk menunjukkan awal dan akhir, sebaliknya jika string memiliki kecocokan di tengah,@@@@xyz%%%%
maka string tersebut masih cocok.sumber
-
pertama dalam set, untuk menghindari menentukan rentang. Dan\w
mencakup alfanumerik dan garis bawah. Jadi yang Anda butuhkan[\w.-]+
.Untuk benar-benar menutupi pola Anda, yaitu, nama file yang valid sesuai dengan aturan Anda, saya rasa Anda membutuhkan lebih banyak. Perhatikan bahwa ini tidak cocok dengan nama file legal dari perspektif sistem . Itu akan bergantung pada sistem dan lebih liberal dalam apa yang diterimanya. Ini dimaksudkan agar sesuai dengan pola Anda yang dapat diterima.
^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
Penjelasan:
^
Cocokkan awal string. Ini (ditambah pencocokan akhir) memaksa string untuk menyesuaikan dengan ekspresi yang tepat, tidak hanya berisi substring yang cocok dengan ekspresi.([a-zA-Z0-9]+[_-])*
Nol atau lebih kemunculan satu atau beberapa huruf atau angka diikuti dengan garis bawah atau tanda hubung. Ini menyebabkan semua nama yang mengandung tanda hubung atau garis bawah memiliki huruf atau angka di antara mereka.[a-zA-Z0-9]+
Satu atau lebih huruf atau angka. Ini mencakup semua nama yang tidak mengandung garis bawah atau setrip.\.
Titik literal (titik). Memaksa nama file untuk memiliki ekstensi dan, dengan pengecualian dari pola lainnya, hanya izinkan titik yang akan digunakan antara nama dan ekstensi. Jika Anda menginginkan lebih dari satu ekstensi yang dapat ditangani juga menggunakan teknik yang sama seperti untuk tanda hubung / garis bawah, tepat di bagian akhir.[a-zA-Z0-9]+
Satu atau lebih huruf atau angka. Ekstensi minimal harus satu karakter dan hanya berisi huruf dan angka. Ini tipikal, tetapi jika Anda ingin mengizinkan garis bawah, itu bisa diatasi juga. Anda juga dapat memberikan rentang panjang{2,3}
sebagai ganti satu atau lebih+
matcher, jika itu lebih sesuai.$
Cocokkan ujung string. Lihat karakter awal.sumber
Ini adalah pola yang Anda cari
/^[\w-_.]*$/
Artinya:
^
Awal dari string[...]
Cocokkan karakter di dalamnya\w
Karakter kata apapun gitu0-9
a-z
A-Z
-_.
Cocok-
dan_
dan.
*
Nol atau lebih dari pola atau tidak terbatas$
Akhir stringJika Anda ingin membatasi jumlah karakter:
/^[\w-_.]{0,5}$/
{0,5}
Berarti0-5
karaktersumber
\w
termasuk_
Sesuatu seperti ini seharusnya berhasil
$code = "screen new file.css"; if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code)) { echo "not valid"; }
Ini akan bergema "tidak valid"
sumber
[A-Za-z0-9_.-]*
Ini juga akan cocok untuk string kosong, jika Anda tidak ingin menukar yang terakhir
*
dengan+
sumber