Saya ingin memiliki ekspresi reguler yang memeriksa apakah string hanya berisi huruf besar dan kecil, angka, dan garis bawah.
Saya ingin memiliki ekspresi reguler yang memeriksa apakah string hanya berisi huruf besar dan kecil, angka, dan garis bawah.
Jawaban:
Untuk mencocokkan string yang hanya berisi karakter tersebut (atau string kosong), cobalah
"^[a-zA-Z0-9_]*$"
Ini berfungsi untuk .NET regular expressions, dan mungkin juga banyak bahasa lain.
Hancurkan:
^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string
Jika Anda tidak ingin mengizinkan string kosong, gunakan + alih-alih *.
Seperti yang telah ditunjukkan orang lain, beberapa bahasa regex memiliki bentuk steno untuk [a-zA-Z0-9_]
. Dalam bahasa .NET regex, Anda bisa mengaktifkan perilaku ECMAScript dan menggunakannya \w
sebagai singkatan (menghasilkan ^\w*$
atau ^\w+$
). Perhatikan bahwa dalam bahasa lain, dan secara default dalam .NET, \w
agak lebih luas, dan akan cocok dengan jenis karakter Unicode lainnya (terima kasih kepada Jan untuk menunjukkan ini). Jadi jika Anda benar-benar berniat untuk mencocokkan hanya karakter-karakter itu, menggunakan formulir eksplisit (lebih panjang) mungkin yang terbaik.
[\p{upper}\p{lower}\p{gc=Number}_]
adalah semua yang perlu Anda lakukan dengan benar, dengan anggapan tidak ada kombinasi karakter.
Ada banyak kata-kata kasar di sini, dan saya sangat menentangnya, jadi, jawaban konklusif saya adalah:
/^\w+$/
\w
setara dengan [A-Za-z0-9_]
, yang cukup banyak yang Anda inginkan. (kecuali kami memperkenalkan unicode ke dalam campuran)
Menggunakan +
quantifier Anda akan cocok dengan satu atau lebih karakter. Jika Anda ingin menerima string kosong juga, gunakan *
saja.
\w
biasanya tidak terbatas pada ASCII saja.
[a-z]
dan variasinya. \w
akan menangkap karakter non-latin juga. Suka šēēā
atauкукареку
Anda ingin memeriksa bahwa setiap karakter sesuai dengan kebutuhan Anda, itulah sebabnya kami menggunakan:
[A-Za-z0-9_]
Dan Anda bahkan dapat menggunakan versi steno:
\w
Yang setara (dalam beberapa rasa regex, jadi pastikan Anda memeriksa sebelum menggunakannya). Kemudian untuk menunjukkan bahwa seluruh string harus cocok, Anda menggunakan:
^
Untuk menunjukkan string harus dimulai dengan karakter itu, lalu gunakan
$
Untuk menunjukkan string harus diakhiri dengan karakter itu. Kemudian gunakan
\w+ or \w*
Untuk menunjukkan "1 atau lebih", atau "0 atau lebih". Menyatukan semuanya, kami memiliki:
^\w*$
Um ... pertanyaan: Apakah harus memiliki setidaknya satu karakter atau tidak? Bisakah itu string kosong?
^[A-Za-z0-9_]+$
Akan melakukan setidaknya satu huruf besar atau kecil alfanumerik atau garis bawah. Jika panjangnya nol, maka ganti + untuk *
^[A-Za-z0-9_]*$
Edit:
Jika diakritik perlu dimasukkan (seperti cedilla - ç) maka Anda perlu menggunakan karakter kata yang melakukan hal yang sama seperti di atas, tetapi termasuk karakter diakritik:
^\w+$
Atau
^\w*$
Meskipun lebih verbose daripada \w
, saya pribadi menghargai keterbacaan nama kelas karakter POSIX lengkap ( http://www.zytrax.com/tech/web/regex.htm#special ), jadi saya akan mengatakan:
^[[:alnum:]_]+$
Namun, sementara dokumentasi di tautan di atas menyatakan bahwa \w
"Cocokkan karakter apa pun dalam rentang 0 - 9, A - Z dan a - z (setara dengan POSIX [: alnum:])", saya belum menemukan ini benar . Tidak dengan cara apa pun grep -P
. Anda harus secara eksplisit memasukkan garis bawah jika Anda menggunakan [:alnum:]
tetapi tidak jika Anda menggunakannya \w
. Anda tidak bisa mengalahkan yang berikut ini karena singkat dan manis:
^\w+$
Bersamaan dengan keterbacaan, menggunakan kelas karakter POSIX ( http://www.regular-expressions.info/posixbrackets.html ) berarti bahwa regex Anda dapat bekerja pada string non ASCII, yang tidak akan dilakukan oleh regex berbasis rentang karena mereka bergantung pada urutan dasar karakter ASCII yang mungkin berbeda dari rangkaian karakter lain dan karenanya akan mengecualikan beberapa karakter non-ASCII (huruf seperti œ) yang mungkin ingin Anda tangkap.
Dalam Ilmu Komputer, nilai alfanumerik sering berarti karakter pertama bukan angka tetapi alfabet atau garis bawah. Setelah itu karakter bisa 0-9
, A-Z
, a-z
, atau garis bawah ( _
).
Inilah cara Anda melakukannya:
Diuji di bawah php:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
atau ambil ini
^[A-Za-z_][A-Za-z\d_]*$
dan letakkan dalam bahasa pengembangan Anda.
gunakan lookaheads untuk melakukan hal "setidaknya satu". Percayalah, ini jauh lebih mudah.
Berikut ini contoh yang membutuhkan 1-10 karakter, yang mengandung setidaknya satu digit dan satu huruf:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
CATATAN: bisa menggunakan \ w tetapi kemudian pertimbangan ECMA / Unicode ikut bermain meningkatkan cakupan karakter dari \ w "karakter karakter".
Coba ekstensi multi-bahasa ini yang telah saya buat untuk string.
IsAlphaNumeric - String harus mengandung paling sedikit 1 alpha (huruf dalam kisaran Unicode, ditentukan dalam charSet) dan minimal 1 angka (ditentukan dalam numSet). Juga, string hanya terdiri dari alfa dan angka.
IsAlpha - String harus mengandung setidaknya 1 alpha (dalam bahasa yang ditentukan charSet) dan hanya terdiri dari alpha.
IsNumeric - String harus mengandung setidaknya 1 angka (dalam bahasa yang ditentukan numSet) dan hanya terdiri dari angka.
Rentang charSet / numSet untuk bahasa yang diinginkan dapat ditentukan. Rentang Unicode tersedia di tautan di bawah ini:
http://www.ssec.wisc.edu/~tomw/java/unicode.html
API:
public static bool IsAlphaNumeric(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
const string numSet = @"0-9";
//Greek
//const string charSet = @"\u0388-\u03EF";
//const string numSet = @"0-9";
//Bengali
//const string charSet = @"\u0985-\u09E3";
//const string numSet = @"\u09E6-\u09EF";
//Hindi
//const string charSet = @"\u0905-\u0963";
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
}
public static bool IsNumeric(this string stringToTest)
{
//English
const string numSet = @"0-9";
//Hindi
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
}
public static bool IsAlpha(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
}
Penggunaan:
//English
string test = "AASD121asf";
//Greek
//string test = "Ϡϛβ123";
//Bengali
//string test = "শর৩৮";
//Hindi
//string test = @"क़लम३७ख़";
bool isAlphaNum = test.IsAlphaNumeric();
Regex berikut cocok dengan karakter alfanumerik dan garis bawah:
^[a-zA-Z0-9_]+$
Misalnya, dalam Perl:
#!/usr/bin/perl -w
my $arg1 = $ARGV[0];
# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
print "Failed.\n";
} else {
print "Success.\n";
}
Ini harus bekerja dalam sebagian besar kasus.
/^[\d]*[a-z_][a-z\d_]*$/gi
Dan maksud saya,
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
^ ... $
- cocok dengan pola yang dimulai dan diakhiri dengan[\d]*
- cocok dengan nol atau lebih digit[a-z_]
- cocok dengan alfabet atau garis bawah[a-z\d_]*
- cocok dengan alfabet atau angka atau garis bawah/gi
- cocok secara global di seluruh string dan case-insensitive1234
adalah kata dari bahasa yang diminta oleh penulis. Bahasa Anda lebih membatasi.
Bagi saya ada masalah di mana saya ingin membedakan antara alpha, numeric dan alpha numeric, jadi untuk memastikan string alfanumerik mengandung setidaknya satu alpha dan setidaknya satu numerik, saya menggunakan:
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
Bagi Anda yang mencari kecocokan alfanumerik unicode, Anda mungkin ingin melakukan sesuatu seperti:
^[\p{L} \p{Nd}_]+$
Bacaan lebih lanjut di http://unicode.org/reports/tr18/ dan di http://www.regular-expressions.info/unicode.html
Saya yakin Anda tidak menggunakan karakter Latin dan Unicode di pertandingan Anda. Misalnya, jika Anda perlu mengambil karakter "ã" atau "ü", penggunaan "\ w" tidak akan berfungsi.
Anda dapat, sebagai alternatif, menggunakan pendekatan ini:
^[A-ZÀ-Ýa-zà-ý0-9_]+$
Semoga ini bisa membantu!
Untuk memeriksa seluruh string dan tidak mengizinkan string kosong, coba
^[A-Za-z0-9_]+$
Ini berfungsi untuk saya, temukan ini di "Menguasai Ekspresi Reguler" O'Reilly:
/^\w+$/
Penjelasan:
Verifikasikan diri Anda:
const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}