Jawaban:
Gunakan ekspresi berikut:
^[a-zA-Z0-9]*$
yaitu:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
Di .NET 4.0 Anda dapat menggunakan LINQ:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
akan berhenti mengeksekusi dan mengembalikan false
pertama kalinya char.IsLetterOrDigit
laporan false
sejak kontrak All
tidak dapat dipenuhi maka.
Catatan! jawaban ini tidak memeriksa alfanumerik secara ketat (yang biasanya adalah AZ, az dan 0-9). Jawaban ini memungkinkan karakter lokal suka åäö
.
Perbarui 2018-01-29
Sintaks di atas hanya berfungsi jika Anda menggunakan metode tunggal yang memiliki argumen tunggal dengan tipe yang benar (dalam kasus ini char
).
Untuk menggunakan banyak kondisi, Anda perlu menulis seperti ini:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')
akan kembali true
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
Anda dapat melakukannya dengan mudah dengan fungsi ekstensi daripada regex ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
for (int i = 0; i < str.Length; i++)
{
if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
return false;
}
return true;
}
Per komentar :) ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
char.IsLetterOrDigit
sebagai gantinya IsLetter + IsNumber
Sementara saya pikir solusi berbasis regex mungkin adalah cara yang saya lakukan, saya akan tergoda untuk merangkum ini dalam sebuah tipe.
public class AlphaNumericString
{
public AlphaNumericString(string s)
{
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(s))
{
value = s;
}
else
{
throw new ArgumentException("Only alphanumeric characters may be used");
}
}
private string value;
static public implicit operator string(AlphaNumericString s)
{
return s.value;
}
}
Sekarang, ketika Anda membutuhkan string yang divalidasi, Anda dapat membuat tanda tangan metode memerlukan AlphaNumericString, dan tahu bahwa jika Anda mendapatkannya, itu valid (selain null). Jika seseorang mencoba mengirimkan string yang tidak divalidasi, itu akan menghasilkan kesalahan kompilator.
Anda bisa menjadi lebih menarik dan mengimplementasikan semua operator kesetaraan, atau cast eksplisit ke AlphaNumericString dari string ol biasa, jika Anda peduli.
static public implicit operator string
bagiannya
Saya perlu memeriksa AZ, az, 0-9; tanpa regex (meskipun OP meminta regex).
Memadukan berbagai jawaban dan komentar di sini, dan diskusi dari https://stackoverflow.com/a/9975693/292060 , ini menguji huruf atau angka, menghindari huruf bahasa lain, dan menghindari angka lain seperti karakter pecahan.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$
akan memperbolehkan a-zA-Z0-9_
Gunakan ^[a-zA-Z0-9]+$
untuk melarang garis bawah.
Perhatikan bahwa keduanya memerlukan string yang tidak boleh kosong. Menggunakan *
alih-alih +
mengizinkan string kosong.
^[\w-]+$
Untuk memeriksa apakah string tersebut merupakan kombinasi huruf dan angka, Anda dapat menulis ulang jawaban @jgauffin sebagai berikut menggunakan .NET 4.0 dan LINQ:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
Jawaban yang sama seperti di sini .
Jika Anda menginginkan A-z 0-9
pemeriksaan ASCII non-regex , Anda tidak dapat menggunakannya char.IsLetterOrDigit()
karena itu menyertakan karakter Unicode lainnya.
Apa yang dapat Anda lakukan adalah memeriksa rentang kode karakter.
Berikut ini sedikit lebih bertele-tele, tetapi ini untuk kemudahan pemahaman daripada untuk kode golf.
public static bool IsAsciiAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
{
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] < 48) // Numeric are 48 -> 57
{
return false;
}
if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
{
return false;
}
if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
{
return false;
}
if (str[i] > 122)
{
return false;
}
}
return true;
}
Berdasarkan jawaban cletus Anda dapat membuat ekstensi baru.
public static class StringExtensions
{
public static bool IsAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
Regex r = new Regex("^[a-zA-Z0-9]*$");
return r.IsMatch(str);
}
}
Saya menyarankan untuk tidak bergantung pada kode siap pakai dan built-in dalam kerangka .NET, coba berikan solusi baru .. inilah yang saya lakukan ..
public bool isAlphaNumeric(string N)
{
bool YesNumeric = false;
bool YesAlpha = false;
bool BothStatus = false;
for (int i = 0; i < N.Length; i++)
{
if (char.IsLetter(N[i]) )
YesAlpha=true;
if (char.IsNumber(N[i]))
YesNumeric = true;
}
if (YesAlpha==true && YesNumeric==true)
{
BothStatus = true;
}
else
{
BothStatus = false;
}
return BothStatus;
}
char.IsNumber()
metode karena itu adalah kode yang sudah dibuat sebelumnya?