Kiểm tra và liệt kê các ký tự đặc biệt (không phải chữ cái, không phải số) trong chuỗi bằng char.IsLetterOrDigit.
Mã nguồn
using System;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
string str = "Amit$#%";
Console.WriteLine("Chuỗi: " + str);
char[] chars = str.ToCharArray();
var specialChars = new System.Collections.Generic.List();
foreach (char c in chars) {
if (!char.IsLetterOrDigit(c)) {
specialChars.Add(c);
}
}
Console.WriteLine("Các ký tự đặc biệt tìm thấy:");
foreach (char c in specialChars) {
Console.WriteLine($" '{c}' (U+{(int)c:X4})");
}
Console.ReadLine();
}
}
}
Kết quả
Chuỗi: Amit$#%
Các ký tự đặc biệt tìm thấy:
'$' (U+0024)
'#' (U+0023)
'%' (U+0025)
Cách LINQ gọn nhẹ
using System.Linq;
string str = "Amit$#%";
var specials = str.Where(c => !char.IsLetterOrDigit(c)).Distinct();
foreach (char c in specials) {
Console.WriteLine($"'{c}'");
}
Kiểm tra CÓ chứa ký tự đặc biệt (boolean)
bool HasSpecialChar(string s) {
return s.Any(c => !char.IsLetterOrDigit(c));
}
// Hoặc dùng Regex
bool HasSpecialCharRegex(string s) {
return System.Text.RegularExpressions.Regex.IsMatch(s, @"[^a-zA-Z0-9]");
}
Định nghĩa "ký tự đặc biệt"
Thường là: không phải chữ cái (Letter) và không phải số (Digit).
- Bao gồm: khoảng trắng, dấu câu, ký hiệu toán học, emoji, ký tự điều khiển...
char.IsLetterOrDigittrả về true cho: A-Z, a-z, 0-9, và chữ cái Unicode (tiếng Việt, tiếng Nhật, Arabic...).
Lưu ý
- Code gốc dùng mảng fixed-size + resize — phức tạp không cần. Dùng
List<char>hoặc LINQ. - Khoảng trắng (
' ','\t') cũng được coi là ký tự đặc biệt theo định nghĩa này. - Nếu chỉ muốn kiểm tra ký tự đặc biệt cụ thể (vd: chỉ cho phép
@.-_trong email), dùng whitelist thay vì blacklist.