Текстовое поле Winforms позволяет пользователю вводить только слова, цифры, точки и пробелы между словами. Regex - PullRequest
0 голосов
/ 04 мая 2020

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

Пример:

Название компании может содержать только следующие символы:

  • TestCompany1
  • Second_Compay
  • Best-Company 123
  • My-Company doo
  • Stack.Oveflow-Company_

Что я пытаюсь:

 string companyName = "My Company #%";

  if(Regex.IsMatch(companyName, @"^[a-zA-Z0-9_.-]+$"))
  {
     MessageBox.Show("Company name contain invalid characteds");
  }
  else 
  {
        // success
   }

Но это не работает.

Мне просто нужно, чтобы пользователь мог вводить только:

Буквы, цифры, точки, строки подчеркивания, - и между словами все остальные указанные c символы, не разрешенные в имени.

Есть ли у меня ошибка в регулярных выражениях?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Как указано в комментариях Виктора Стрибиева, ваша логика c гласит, что при наличии действительного шаблона

if(Regex.IsMatch(companyName, @"^[a-zA-Z0-9_.-]+$"))

Затем покажите:

 MessageBox.Show("Company name contain invalid characteds");

Что должно быть наоборот.

Вы можете использовать точку и дефис в качестве разделителя в классе символов [-.] в повторяющемся шаблоне.

Если вы поместите их в качестве первой части, они не будут совпадать в начале и в конце.

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

^[a-zA-Z0-9_]+(?:[-.][a-zA-Z0-9_]+)*(?: [a-zA-Z0-9_]+(?:[-.][a-zA-Z0-9_]+)*)*$

Regex demo

1 голос
/ 04 мая 2020

Вы забыли включить символ пробела. И как уже упоминалось в комментариях, ваша логика c перевернута:

if (Regex.IsMatch(companyName, @"^([a-zA-Z0-9_.-]|\s)+$"))
{
    Console.WriteLine("Valid");
}
else 
{
    Console.WriteLine("Company name contains invalid characters");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...