Определение диапазона для алфавитов в C # - PullRequest
1 голос
/ 05 мая 2011

У меня проблемы с созданием программы меток в C # 2.0, вот ее код

Console.WriteLine("Prislogix Public School");
Console.WriteLine("\n\nMarksheet\n\n");
Console.WriteLine("Enter Student Name : ");
string name = Console.ReadLine();
Console.WriteLine("\nEnter Class : ");
string cls = Console.ReadLine();
Console.WriteLine("\nEnter Roll Number : ");
int roll = int.Parse(Console.ReadLine());

Это основная задача записи и чтения. То, что я хочу создать, это условие для имени. Например, если пользователь вводит 123 в поле имени, он принимает имя как 123.

Я не хочу, чтобы в поле имени были какие-либо цифры. Как это может быть сделано? Нужно ли определять диапазон для кодов ASCII для алфавитов? Я думаю, что будет использован цикл do.. while, но как определить диапазон между алфавитами (от A до Z или от a до z).

Ответы [ 9 ]

1 голос
/ 05 мая 2011

Сравнение с регулярным выражением:

if (!Regex.Match(name, "^([A-Za-z ]+)$").Success)
{
  // Error message here.
}

Это также разрешит пробелы в именах людей, что, вероятно, является тем, что вам нужно.

Подробнее о регулярных выражениях в C # здесь: http://tim.oreilly.com/pub/a/oreilly/windows/news/csharp_0101.html

1 голос
/ 05 мая 2011

Вы можете сделать это просто так:

if(!Regex.Matches(name, "^[a-zA-Z]+$"))
    // name is invalid
0 голосов
/ 05 мая 2011
string sPattern = "^[A-Za-z]+$"
bool isValid = false;
while(!isValid)
{
   Console.WriteLine("Enter Student Name : ");
   string name = Console.ReadLine();
   isValid = System.Text.RegularExpressions.Regex.Match(name, sPattern);
}

в основном проверяет значение имени по отношению к регулярному выражению, пока они не получат правильное значение

0 голосов
/ 05 мая 2011

Если тест состоит в том, что строка не должна содержать никаких цифр (разрешены все другие символы), вы можете использовать регулярное выражение:

var regExContainsDigit = new Regex(@"\d");

if (regExContainsDigit.IsMatch(name)) {
   // contains at least 1 digit
}

Это усложняется, если в имени разрешены только буквы. Тогда вам также следует подумать о пробелах, точках, буквах с диакритами (ë é) и т. Д.

0 голосов
/ 05 мая 2011

Самый надежный и, пожалуй, самый простой способ - запустить то, что пользователь ввел через регулярное выражение:

...
var validName = false;
 while (!validName)
 {
    if(!Regex.Match(name, "^[A-Za-z ]+$")
      Console.WriteLine("Invalid name; try again");
    else
      validName = true;
 }
...
0 голосов
/ 05 мая 2011

Вы можете использовать регулярное выражение.Если они вводят неверную запись, отклоните запись, отобразите сообщение и запросите ввод еще раз.Вы можете сделать все это в 5 строк с помощью одного цикла while для каждого Console.ReadLine ().

также:

int roll = int.Parse(Console.ReadLine()); 

int.Parse вызовет исключение, если строка содержитлюбые нечисловые символы.

0 голосов
/ 05 мая 2011

Вы можете сделать это с помощью простого цикла

string name = String.empty
do
{
  Console.WriteLine("Enter Student Name : ");
  name = Console.ReadLine()
}
while(!Regex.Match(name, "^([A-Za-z ]+)$").Success);
0 голосов
/ 05 мая 2011

Вы можете использовать класс RegEx и посмотреть, соответствует ли он вашему вводу.

0 голосов
/ 05 мая 2011
Match match = Regex.Match(name, @"[A-Za-z]+", RegexOptions.IgnoreCase);
// Here we check the Match instance.
if (match.Success)
{
...
}
...