Базовая проверка ввода пользователя // необходимо руководство - PullRequest
0 голосов
/ 01 октября 2019

в прошлый раз я спрашивал некоторых ребят здесь о том, что я могу сделать, чтобы проверить вводимые пользователем данные в моей программе. Я рад, что есть достаточно людей, у которых есть время для новичка в этой области. как их предложения, я знакомлюсь с регулярными выражениями. Цикл был моим первым вариантом, но, похоже, не работает в некоторых случаях. Тем не менее, мне трудно понять, как работают регулярные выражения, и смотреть учебники в Интернете, а также следить за решениями в сети, что делает его более сложным для меня. я плох в этом, я признаю. Я почти в первый месяц обучения c # и надеюсь, что есть более новаторский подход к использованию регулярных выражений, так как я просто хочу знать, как я могу использовать его для проверки пользовательских входов. пока что.

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

Может ли кто-нибудь рассказать о том, как использовать регулярные выражения для правильной фильтрации пользовательского ввода? Решения в сети не являются специфическими. я хочу отфильтровать введенные имя (полное имя), а также действительный возраст (я мог бы попытаться задать даты рождения и определить значение возраста)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace test_console
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.Write("pls input ur name: ");
            string nametxt = Console.ReadLine();
            string namePattern = @"[A-z]$";
            if (!Regex.IsMatch(nametxt, namePattern))
            {
                Console.WriteLine("invalid name!");
                nametxt = Console.ReadLine();
            }

            while (string.IsNullOrEmpty(nametxt))
            {
                Console.WriteLine("pls input a name!");
                nametxt = Console.ReadLine();
            }

            Console.Write("now input ur age: ");
            int age;
            while (!int.TryParse(Console.ReadLine(), out age))
            { Console.WriteLine("invalid age!"); }

            Console.WriteLine("hi {0}, you are {1} ", nametxt, age);


            Console.ReadKey();
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

На основании приведенного выше кода ваше выражение Regex неверно для текста, например, если кто-то добавляет пробел в имени, он обнаружит, что он не является именем.

во-вторых, если вы хотите добавить Regex для имензатем добавьте также к возрасту.

наконец, вопрос не так ясен, так что, пожалуйста, дайте нам больше подробностей о том, что вы ищете.

0 голосов
/ 01 октября 2019

, если вы спрашиваете о регулярных выражениях , тогда шаблон для проверки имени

 string namePattern = @"[A-z]$";

, если почти определенно неправильно. Теперь вы ищете строку, которая заканчивается ($ якорь) на

 [A-z] - exactly one character in A..z range

, если вы обратитесь к таблице Ascii для диапазона A..zобнаружите, что он имеет

 A,..., Z, [, \, ], ^, _, `, a, ... z

символов (примечание, нежелательных [, ], \), поэтому 123[ является допустимым именем (оно заканчивается на [, который находится в допустимый диапазон ). Вам, вероятно, нужен такой шаблон:

 string namePattern = @"^[A-Za-z]+$";

pattern:

 ^          - string start
 [A-Za-z]+  - one or many characters, each in A..Z or a..z range
 $          - string end 

Итак, вся строка должна содержать хотя бы один символ и все символы должны быть либо в A-Z или в a-z диапазоне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...