Tôi đọc một chuỗi từ bảng điều khiển. Làm cách nào để đảm bảo nó chỉ chứa các ký tự và chữ số tiếng Anh?Làm cách nào để xác minh rằng một chuỗi bằng tiếng Anh?
Trả lời
Giả sử rằng bằng cách "ký tự tiếng Anh" bạn chỉ đơn giản là đề cập đến bảng chữ cái Latin 26 ký tự, đây sẽ là một khu vực nơi tôi sẽ sử dụng biểu thức thông thường: ^[a-zA-Z0-9 ]*$
Ví dụ:
if(Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$"))
{ /* your code */ }
Lợi ích của các biểu thức chính quy trong trường hợp này là tất cả những gì bạn thực sự quan tâm là liệu chuỗi có khớp với một mẫu hay không - đây là một trong những biểu thức chính quy hoạt động tuyệt vời. Nó rõ ràng nắm bắt ý định của bạn, và nó dễ dàng mở rộng nếu bạn định nghĩa "các ký tự tiếng Anh" mở rộng ra ngoài 26 chữ cái.
Có một phong nha series of articles here dạy nhiều hơn về các cụm từ thông dụng.
Câu trả lời của Jørn Schou-Rode cung cấp giải thích tuyệt vời về cách biểu thức chính quy được trình bày tại đây hoạt động để khớp với thông tin bạn nhập.
Bạn cũng có thể bao gồm khoảng trắng; "a b c" trả về false cho mẫu regex đã cho. –
... và dấu chấm câu – Joe
Và điều gì về các ký tự dấu chấm câu ưa thích như ký tự dấu chấm lửng (…) hoặc dấu nháy đơn? Chúng có các ký tự unicode riêng của chúng. –
Bạn có thể phù hợp với nó chống lại biểu thức chính quy này: ^[a-zA-Z0-9]*$
^
phù hợp với sự khởi đầu của chuỗi (tức là không có nhân vật được phép trước thời điểm này)[a-zA-Z0-9]
trận đấu bất kỳ lá thư từ az in thường hoặc trên trường hợp, cũng như các chữ số 0-9*
cho phép kết quả trùng khớp trước đó bằng không hoặc nhiều lần$
khớp với phần cuối của st vòng (tức là không có nhân vật được phép sau thời điểm này)
Để sử dụng các biểu hiện trong một chương trình C#, bạn sẽ cần phải nhập khẩu System.Text.RegularExpressions
và làm điều gì đó như thế này trong mã của bạn:
bool match = Regex.IsMatch(input, "^[a-zA-Z0-9]*$");
Nếu bạn sẽ kiểm tra rất nhiều dòng chống lại các mô hình, bạn có thể muốn biên dịch biểu thức:
Regex pattern = new Regex("^[a-zA-Z0-9]*$", RegexOptions.Compiled);
for (int i = 0; i < 1000; i++)
{
string input = Console.ReadLine();
pattern.IsMatch(input);
}
Lưu ý rằng mẫu này sẽ trả về false nếu chuỗi đầu vào chứa khoảng trắng. –
bool AllAscii(string str)
{
return !str.Any(c => !Char.IsLetterOrDigit(c));
}
Rất tốt để xác định xem chuỗi có ký tự không hợp lệ hay không ... – IAbstract
IsLetterOrDigit sẽ đúng với bất kỳ ký tự Unicode nào. Không chỉ cho tiếng Anh. Tôi có đúng không? –
Nó có kết quả sai theo những gì tôi kiểm tra. –
Something như thế này (nếu bạn muốn kiểm soát đầu vào):
static string ReadLettersAndDigits() {
StringBuilder sb = new StringBuilder();
ConsoleKeyInfo keyInfo;
while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) {
char c = char.ToLower(keyInfo.KeyChar);
if (('a' <= c && c <= 'z') || char.IsDigit(c)) {
sb.Append(keyInfo.KeyChar);
Console.Write(c);
}
}
return sb.ToString();
}
bạn có quyền truy cập web không? tôi sẽ giả định rằng không thể được đảm bảo, nhưng Google có một ngôn ngữ api sẽ phát hiện ngôn ngữ bạn vượt qua nó. google language api
Nếu tôi không muốn sử dụng RegEx và chỉ để cung cấp giải pháp thay thế, bạn có thể kiểm tra mã ASCII của mỗi ký tự và nếu nằm trong khoảng đó, nó sẽ là một chữ cái tiếng Anh hoặc một số (Đây có thể không phải là giải pháp tốt nhất):
foreach (char ch in str.ToCharArray())
{
int x = (int)char;
if (x >= 63 and x <= 126)
{
//this is english letter, i.e.- A, B, C, a, b, c...
}
else if(x >= 48 and x <= 57)
{
//this is number
}
else
{
//this is something diffrent
}
}
http://en.wikipedia.org/wiki/ASCII cho bảng ASCII đầy đủ.
Nhưng tôi vẫn nghĩ, RegEx là giải pháp tốt nhất.
Câu trả lời không chính xác này nhầm lẫn ASCII với "tiếng Anh". – tchrist
Tôi đồng ý với câu trả lời Cụm từ thông dụng. Tuy nhiên, bạn có thể đơn giản hóa nó thành "^ [\ w] + $". \ w là bất kỳ "ký tự từ" nào (có nghĩa là [a-zA-Z_0-9] nếu bạn sử dụng bảng chữ cái không phải là unicode. Tôi cũng không biết bạn có muốn gạch dưới không. .net đây:. http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic8
bool onlyEnglishCharacters = !EnglishText.Any(a => a > '~');
vẻ rẻ, nhưng nó làm việc cho tôi, dễ trả lời legit Hy vọng nó giúp mọi người
'NUL',' BEL' và các ký tự ASCII cấp thấp khác đều nhỏ hơn "~" - điều này làm cho điều này dễ vỡ hơn nhiều so với mức cần thiết.Thêm một '|| a <'0'' và bạn muốn tiến gần hơn đến giải pháp :-) –
Như nhiều chỉ ra, câu trả lời chấp nhận chỉ có tác dụng nếu có một từ duy nhất. trong chuỗi Vì không có câu trả lời bao gồm trường hợp nhiều từ hoặc thậm chí các câu trong chuỗi, đây là mã:
stringToCheck.Any(x=> char.IsLetter(x) && !((int)x >= 63 && (int)x <= 126));
Một cách khác là kiểm tra xem IsLower và IsUpper có trả về đúng không. Cái gì như:
private bool IsAllCharEnglish(string Input)
{
foreach (var item in Input.ToCharArray())
{
if (!char.IsLower(item) && !char.IsUpper(item) && !char.IsDigit(item) && !char.IsWhiteSpace(item))
{
return false;
}
}
return true;
}
và sử dụng nó:
string str = "فارسی abc";
IsAllCharEnglish(str); // return false
str = "These are english 123";
IsAllCharEnglish(str); // return true
<?php
$string="हिन्दी";
$string="Manvendra Rajpurohit";
echo strlen($string); echo '<br>';
echo mb_strlen($string, 'utf-8');
echo '<br>';
if(strlen($string) != mb_strlen($string, 'utf-8'))
{
echo "Please enter English words only:(";
}
else {
echo "OK, English Detected!";
}
?>
Hãy thử mẹo đơn giản này và tôi chắc chắn bạn sẽ thích nó .. –
- 1. Làm cách nào để xác minh rằng một chuỗi các chuỗi có chứa một chuỗi nhất định?
- 2. Cách xác định chuỗi là tiếng Anh hoặc tiếng Ả Rập?
- 3. Làm cách nào để chuyển đổi chuỗi Cyrillic sang tiếng Anh trong C#
- 4. Đếm từ tiếng Anh trong một chuỗi ngẫu nhiên
- 5. Làm thế nào để xác minh với QTest rằng một ngoại lệ được ném?
- 6. Có phải C# bằng tiếng Anh không?
- 7. Cách tăng :: hệ thống :: error_code :: tin nhắn bằng tiếng Anh?
- 8. Làm thế nào để có được một "tên tiếng Anh" cho một nhân vật?
- 9. Làm cách nào để xác minh rằng các trang web đang được gzipped?
- 10. Làm cách nào để xác minh rằng mảng được mong đợi là mảng thực trong MSTest?
- 11. trong R cách nhận thông báo lỗi bằng tiếng Anh
- 12. Làm cách nào để xác minh rằng gói ứng dụng Android được ký bằng chứng chỉ phát hành?
- 13. Làm cách nào để sử dụng VIM hiệu quả để chỉnh sửa văn bản tiếng Anh?
- 14. Động từ tiếng Anh
- 15. Phát hiện xem văn bản bằng tiếng Anh có python
- 16. Cách kiểm tra xem một chuỗi có chứa các chữ cái tiếng Anh (A-Z) không?
- 17. Làm cách nào để xác minh rằng một tệp khóa công cộng cụ thể được sử dụng với git?
- 18. Từ tiếng Anh tự nhiên
- 19. Làm cách nào để viết các ký tự không phải tiếng Anh như ký tự tiếng Ả Rập hoặc tiếng Ba Tư vào một hình ảnh?
- 20. Tài nguyên kim tự tháp: Bằng tiếng Anh đơn giản
- 21. Làm cách nào để chuyển đổi chữ số tiếng Anh sang chữ số Ả Rập?
- 22. Từ tiếng Anh nào có thể được tạo bằng cách sử dụng hệ thập lục phân?
- 23. SOA "bằng tiếng Anh đơn giản" là gì?
- 24. Sử dụng Eclipse với tiếng Ả Rập và tiếng Anh trên cùng một dòng
- 25. Làm thế nào để tìm thấy nếu một chuỗi có tất cả các chữ tiếng Anh hoặc arabic
- 26. Giải thích về NSIncrementalStore bằng tiếng Anh đơn giản
- 27. Làm thế nào để bạn xác minh rằng một nhiệm vụ theo lịch trình tồn tại trên một máy chủ bằng cách sử dụng C#?
- 28. Làm cách nào để xác minh rằng hiệu chuẩn máy ảnh là chính xác? (hoặc làm thế nào để ước tính lỗi tái phát)
- 29. Có cách nào để sử dụng một từ điển tiếng Anh Úc trong WPF
- 30. Làm cách nào để xác minh một phương thức được gọi chính xác một lần bằng Moq?
“ký tự tiếng Anh” cho bạn (chứ chưa nói đến thực tế là kịch bản và ngôn ngữ là điều hoàn toàn khác nhau và tiếng Anh sử dụng là gì Chữ Latinh)? "Ngây thơ" là một từ tiếng Anh hoàn toàn hợp lệ, nhưng nó chứa một chữ cái không phải ASCII. Nếu tên miền của bạn thực sự là "chuỗi từ tiếng Anh" thì bạn phải cẩn thận hơn nếu bạn chỉ có nghĩa là "chuỗi chữ cái và chữ số ASCII". – Joey
@Johannes Rössel điểm tốt! –
Hơi ngạc nhiên rằng chín người nghĩ rằng câu hỏi này là 'hữu ích và rõ ràng' khi "chỉ chứa chữ và chữ số tiếng Anh" là rất rất mơ hồ ... – AakashM