Saya ingin memiliki ekspresi reguler yang memeriksa apakah suatu string hanya berisi huruf besar dan huruf kecil, angka, dan garis bawah.
Untuk mencocokkan string yang berisi hanya karakter-karakter (atau string kosong), mencoba
"^[a-zA-Z0-9_]*$"
Ini bekerja untuk .NET ekspresi reguler, dan mungkin banyak bahasa lainnya juga.
Breaking it down:
^ : 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 don't ingin membiarkan string kosong, gunakan + bukan *.
EDIT Sebagai orang lain telah menunjukkan, beberapa regex bahasa memiliki bentuk singkatan untuk [a-zA-Z0-9_]
. Di .NET regex bahasa, anda dapat mengaktifkan ECMAScript perilaku dan menggunakan \w
sebagai singkatan (menghasilkan ^\w*$
atau ^\w+$
). Perhatikan bahwa dalam bahasa lain, dan secara default di .NET, \w
agak lebih luas, dan akan cocok dengan jenis lain dari karakter unicode juga (terima kasih untuk Jan untuk menunjukkan ini). Jadi jika anda're benar-benar berniat untuk pertandingan hanya karakter-karakter, menggunakan eksplisit (lagi) bentuk ini mungkin yang terbaik.
Ada's banyak bertele-tele di sini, dan saya'm mendalam terhadap hal itu, jadi, saya pasti jawabannya akan sama:
/^\w+$/
\w
setara dengan [A-Za-z0-9_]
, yang adalah cukup banyak apa yang anda inginkan. (kecuali kita memperkenalkan unicode untuk mix)
Menggunakan +
quantifier anda'll mencocokkan satu atau lebih karakter. Jika anda ingin menerima string kosong juga, menggunakan *
sebagai gantinya.
Anda ingin memeriksa bahwa masing-masing karakter sesuai kebutuhan anda, yang mengapa kami gunakan:
[A-Za-z0-9_]
Dan anda bahkan dapat menggunakan versi singkat:
\w
Yang setara (dalam beberapa regex rasa, jadi pastikan anda memeriksa sebelum anda menggunakannya). Kemudian untuk menunjukkan bahwa seluruh string harus sesuai, anda gunakan:
^
Untuk menunjukkan string harus dimulai dengan karakter itu, maka menggunakan
$
Untuk menunjukkan string harus diakhiri dengan karakter itu. Kemudian gunakan
\w+ or \w*
Untuk menunjukkan "1 atau lebih", atau "0 atau lebih". Menempatkan itu semua bersama-sama, kita memiliki:
^\w*$
Meskipun itu's lebih rinci daripada \w
, saya pribadi menghargai pembacaan penuh POSIX karakter nama kelas ( http://www.zytrax.com/tech/web/regex.htm#special ), jadi saya'd mengatakan:
^[[:alnum:]_]+$
Namun, sementara dokumentasi di link di atas menyatakan bahwa \w
akan "Mencocokkan setiap karakter dalam kisaran 0 - 9, A - Z dan a - z (setara dengan POSIX [:alnum:])", saya belum menemukan ini untuk menjadi kenyataan. Tidak dengan grep -P
pula. Anda perlu secara eksplisit mencakup garis bawah jika anda menggunakan [:alnum:]
tetapi tidak jika anda menggunakan \w
. Anda dapat't beat berikut untuk jangka pendek dan manis:
^\w+$
Selain mudah dibaca, dengan menggunakan POSIX kelas karakter (http://www.regular-expressions.info/posixbrackets.html) berarti bahwa anda regex dapat bekerja pada non-ASCII string, yang jangkauan berdasarkan regexes won't lakukan karena mereka mengandalkan mendasari memesan dari karakter ASCII yang mungkin berbeda dari karakter lain set dan oleh karena itu akan mengecualikan beberapa karakter non-ASCII (huruf seperti œ) yang anda mungkin ingin untuk menangkap.
Ehm...pertanyaan: Apakah perlu untuk memiliki setidaknya satu karakter atau tidak? Hal itu dapat menjadi string kosong?
^[A-Za-z0-9_]+$
Akan melakukan setidaknya satu huruf atau lebih rendah alfanumerik atau garis bawah. Jika hal ini dapat panjang nol, maka hanya dengan mengganti tanda + untuk *
^[A-Za-z0-9_]*$
Edit:
Jika diakritik perlu dimasukkan (seperti cedilla - ç) maka anda akan perlu menggunakan kata karakter yang tidak sama seperti di atas, tetapi mencakup karakter diakritik:
^\w+$
Atau
^\w*$
Dalam Ilmu Komputer, sebuah nilai Alfanumerik sering berarti karakter pertama adalah bukan angka tetapi adalah sebuah huruf atau garis bawah. Setelah itu karakter dapat 0-9
, A-Z
, a-z
, atau garis bawah (_
).
Berikut adalah bagaimana anda melakukannya:
Diuji di bawah php:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
atau mengambil ini
^[A-Za-z_][A-Za-z\d_]*$
dan tempat ini dalam pengembangan bahasa.
gunakan lookaheads untuk melakukan "setidaknya satu" hal. Percayalah itu's jauh lebih mudah.
Berikut ini's contoh yang akan memerlukan 1-10 karakter, yang mengandung setidaknya satu angka dan satu huruf:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
NOTE: bisa digunakan \w tapi kemudian ECMA/Unicode pertimbangan datang ke dalam bermain meningkatkan karakter cakupan \w "kata karakter".
Coba ini multi-lingual ekstensi saya telah dibuat untuk string.
IsAlphaNumeric - String harus berisi minimal 1 alpha (huruf Unicode range, yang ditentukan dalam charSet) dan minimal 1 (nomor yang ditentukan dalam numSet). Juga, string harus terdiri hanya dari alpha dan angka.
IsAlpha - String harus berisi minimal 1 alpha (dalam bahasa charSet yang ditentukan) dan terdiri hanya dari alpha.
IsNumeric - String harus berisi minimal 1 jumlah (dalam bahasa numSet ditentukan) dan terdiri hanya dari angka-angka.
CharSet/numSet untuk bahasa yang diinginkan dapat ditentukan. Unicode berkisar tersedia pada link 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();
Berikut regex yang cocok dengan karakter alfanumerik dan garis bawah:
^[a-zA-Z0-9_]+$
Misalnya, di 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";
}
Bagi saya ada masalah dalam bahwa saya ingin membedakan antara alpha, alpha numerik dan numerik, sehingga untuk memastikan alfanumerik string berisi setidaknya satu alpha dan setidaknya satu numerik, saya digunakan :
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
Bagi anda yang mencari unicode alfanumerik yang cocok, 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 percaya anda tidak mengambil Latin dan karakter Unicode dalam pertandingan. Misalnya, jika anda perlu untuk mengambil ",ã" atau ",ü" karakter, penggunaan "\w" tidak't bekerja.
Anda bisa, atau, menggunakan pendekatan ini:
^[A-ZÀ-Ýa-zà-ý0-9_]+$
Semoga membantu!