Thứ nhất, thư là một mơ hồ hạn chút: làm bạn có nghĩa là a..z
và A..Z
ký tự hoặc thư có thể thuộc về bất kỳ bảng chữ cái nào, ví dụ: а..я
và А..Я
(tiếng Nga, chữ Kirin). Theo số triển khai hiện tại, bạn muốn tùy chọn thứ hai thứ hai.
giải pháp điển hình với vòng lặp là để kiểm tra cho đến khi đầu tiên ví dụ truy cập:
Boolean validA = true; // true - no counter examples so far
// Why for? foreach is much readble here
foreach(Char ch in sname)
// "!= '_'" is more readable than "Equals"; and wants no boxing
if (!char.IsLetterOrDigit(ch) && ! (ch != '_')) {
Boolean validA = false; // counter example (i.e. non-letter/digit symbol found)
break; // <- do not forget this: there's no use to check other characters
}
Tuy nhiên bạn có thể đơn giản hóa mã với một trong hai LINQ:
validA = sname.All(ch => Char.IsLetterOrDigit(ch) || ch == '_');
Hoặc biểu thức chính quy:
validA = Regex.IsMatch(sname, @"^\w*$");
Nguồn
2015-12-14 10:35:40
thử sử dụng Regex để kiểm tra mẫu này: ([A-Za-z0-9 \ - \ _] +) –
Tôi không biết. validA là một boolean phải được đặt đúng chỉ khi các điều kiện được thực hiện nhưng nó được đặt đúng ngay cả khi chuỗi có các ký tự đặc biệt –
"Không hoạt động" là gì? lỗi? kết quả không hợp lệ? – Sayse