2016-03-20 3 views
0

Я хочу, чтобы проверить textbox в моей C# формы, поэтому я сделал этот метод, чтобы сделать проверку нижеTextbox проверка с помощью регулярных выражений

  1. только номера допускается.

  2. Разрешены только a-z.

  3. Замена более чем одного места с одним пространством и возврат строки.

Проблема Единственное число разрешено всегда получать сообщение об ошибке, даже если нет a-z.

В конце концов, любое предложение или улучшение ниже кода?

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

правка 20/3/2016 1:12 вечера GMT

GMT Время now: D

   public void input_validation() 
    { 
     string num_regex = @"^[0-9]*$";   //only digits allowed in this textbox 
     string word_regex = @"[a-zA-Z]+";  //only a-z allowed in this textbox 
     string Multi_spaces = @"\s+|\s{2,}"; //more than on white spaces 

     Regex Nregex = new Regex(num_regex); 
     Regex Wregex = new Regex(word_regex); 
     Regex Mregex = new Regex(Multi_spaces); 

     //To check all empty textbox within the groupbox 
     foreach (var emptytxtbox in GB_CUST_INFO.Controls.OfType<TextBox>()) 
     { 
      if (string.IsNullOrEmpty(emptytxtbox.Text.Trim())) 
      { 
       MessageBox.Show("Missing Information are no allowed\n","Missing Information",MessageBoxButtons.OK,MessageBoxIcon.Error); 
       emptytxtbox.BackColor = Color.Red; 
       return; //to stop the check on first empty textbox 
      } 
      else 
      { 
       emptytxtbox.BackColor = Color.White; //to rest the color of missed info at pervious check 
      } 

      if (Mregex.IsMatch(emptytxtbox.Text)) 
      { 
       //just replacing the more than one white spaces with one white space and retrun to its textbox 
       emptytxtbox.Text = Mregex.Replace(emptytxtbox.Text," "); 
      } 
     } 

     if (!Nregex.IsMatch(TB_CUST_PHONE1.Text)) 
     { 
      MessageBox.Show("Only Number are allowed for phone number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      return; 
     } 
     else if (!Nregex.IsMatch(TB_CUST_PHONE2.Text)) 
     { 
      MessageBox.Show("Only Number are allowed for mobile number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      return; 
     } 
     //else if (Mregex.IsMatch(TB_CUST_NAME.Text)) 
     //{ //just replacing the more than one white spaces with one white space and retrun to its textbox 
     // TB_CUST_NAME.Text = Mregex.Replace(TB_CUST_NAME.Text, " "); 
     //} 
     /*else if (Wregex.IsMatch(TB_CUST_NAME.Text)) 
     { 
      MessageBox.Show("Only a-z are allowed"); 
     }*/ 
     else { cust_data_insert(); } 
    } 
+0

Какая ошибка вы получаете по номерам? Вы применяете все три условия для одного и того же «текстового поля»? –

+0

Я имею в виду, что это всегда правда .. Я получаю сообщение. Я пишу независимо от того, что вход в текстовое поле 4656 или 456asd всегда верно – samer

+0

хорошо, давайте начнем с этого. 'if (regex1.IsMatch (TB_CUST_PHONE1.Text))' вызывает ошибку, возникающую при совпадении регулярного выражения - другими словами, если это похоже на номер телефона. Ваша логика инвертирована. Более того, «разрешено только число» и «допускается только« a-z », логически невозможно объединить, поэтому ваша проблема не имеет смысла. – zeromus

ответ

0

Если я правильно понял ваш вопрос, чтобы соответствовать номера в вашем текстовом поле вы должны использовать это:

string num_regex = @"^[0-9]*$"; 
+0

Я тестировал его на этом сайте, и это ничего не поймет http://www.regexr.com/, так как^означает NOT в 0-9 и * означает ноль или более, я прав? – samer

+0

'^' - начало строки, а '$' - конец. Ваше текстовое поле может содержать несколько строк? –

+0

нет его одной строки – samer

0

Чтобы проверить только числа в вашей TextBox попробовать следующее регулярное выражение:

string num_only_regex = @"[0-9]+$"; 

Я проверил это сам об этом, это отлично работает для меня

0

Try:

var text = "abc12- 443"; 
var sanitizedText = string.Empty; 

var result = Regex.Match(text, @"^[a-z0-9\s]+$", 
      RegexOptions.IgnoreCase); 

if (result.Success) 
{ 
    sanitizedText = Regex.Replace(result.Value, "[ ]+", " "); 
    Console.WriteLine(sanitizedText); 
} 
else 
{ 
    Console.WriteLine("Invalid input: ({0})", text); 
} 

Это должно печатать:

abc12 443 #for abc12 443 
Invalid input: (abc12- 443)  #for abc12- 443 

См. Demo здесь

+0

Есть так много переменных (неизвестно), так что получить точно, что неправильно, сложно, поскольку полный код недоступен. Тем не менее, мой фрагмент выше должен решить ваш оригинальный вопрос, который принимает только буквенное числовое и одно пространство. См. Ссылку, опубликованную в моем ответе. – Saleem

Смежные вопросы