Câu trả lời:
Sử dụng biểu thức sau:
^[a-zA-Z0-9]*$
I E:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
Trong .NET 4.0, bạn có thể sử dụng LINQ:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
sẽ ngừng thực hiện và trả về báo cáo false
lần đầu tiên vì khi đó hợp đồng không thể được thực hiện.char.IsLetterOrDigit
false
All
Ghi chú! câu trả lời này không kiểm tra nghiêm ngặt chữ và số (thường là AZ, az và 0-9). Câu trả lời này cho phép các ký tự địa phương như åäö
.
Cập nhật 2018-01-29
Cú pháp trên chỉ hoạt động khi bạn sử dụng một phương thức có một đối số duy nhất thuộc loại chính xác (trong trường hợp này char
).
Để sử dụng nhiều điều kiện, bạn cần viết như sau:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')
sẽ trở lại true
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
Bạn có thể làm điều đó một cách dễ dàng với một hàm tiện ích mở rộng hơn là một hàm 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;
}
Mỗi nhận xét :) ...
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
thay vì IsLetter + ISNUMBER
Trong khi tôi nghĩ rằng giải pháp dựa trên regex có lẽ là cách tôi muốn đi, tôi muốn gói gọn điều này trong một kiểu.
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;
}
}
Bây giờ, khi bạn cần một chuỗi được xác thực, bạn có thể yêu cầu chữ ký phương thức yêu cầu một AlphaNumericString và biết rằng nếu bạn nhận được một chuỗi, thì nó là hợp lệ (ngoại trừ null). Nếu ai đó cố gắng chuyển vào một chuỗi không được xác thực, nó sẽ tạo ra lỗi trình biên dịch.
Bạn có thể lấy fancier và triển khai tất cả các toán tử bình đẳng hoặc một phép truyền rõ ràng tới AlphaNumericString từ chuỗi đơn giản, nếu bạn quan tâm.
static public implicit operator string
một phần
Tôi cần kiểm tra AZ, az, 0-9; không có regex (mặc dù OP yêu cầu regex).
Kết hợp các câu trả lời và nhận xét khác nhau ở đây và thảo luận từ https://stackoverflow.com/a/9975693/292060 , phần này kiểm tra chữ cái hoặc chữ số, tránh các chữ cái ngôn ngữ khác và tránh các số khác như ký tự phân số.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$
sẽ cho phép a-zA-Z0-9_
Sử dụng ^[a-zA-Z0-9]+$
để không cho phép gạch dưới.
Lưu ý rằng cả hai điều này đều yêu cầu chuỗi không được để trống. Sử dụng *
thay vì +
cho phép các chuỗi trống.
^[\w-]+$
Để kiểm tra xem chuỗi có phải là cả chữ cái và chữ số hay không, bạn có thể viết lại câu trả lời @jgauffin như sau bằng cách sử dụng .NET 4.0 và LINQ:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
Câu trả lời tương tự như ở đây .
Nếu bạn muốn một ASCII không regex A-z 0-9
kiểm tra , bạn không thể sử dụng char.IsLetterOrDigit()
vì nó bao gồm các ký tự Unicode khác.
Những gì bạn có thể làm là kiểm tra các dải mã ký tự.
Sau đây là dài dòng hơn một chút, nhưng nó để dễ hiểu hơn là dành cho chơi gôn mã.
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;
}
Dựa trên câu trả lời của cletus, bạn có thể tạo tiện ích mở rộng mới.
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);
}
}
Tôi khuyên bạn không nên phụ thuộc vào mã được tạo sẵn và xây dựng trong .NET framework, hãy thử đưa ra giải pháp mới .. đây là những gì tôi làm ..
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()
phương pháp vì đó là mã xây dựng trước?