2015-02-13 21 views
0

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

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

Выход всегда «".

Вы видите, что я делаю неправильно? Есть ли более разумный способ сделать это? Я получил этот путь от моего инструктора, но не работал. Вот мой код:

public void setFirstName(string newFirstName 

{ 

    bool valid; 

    valid = System.Text.RegularExpressions.Regex.IsMatch(newFirstName, "^[- a-zA-Z]?$"); 

    if (valid) 

    { 

     firstName = newFirstName; 

    } 

     firstName = " "; 

} 
+1

Вам нужно обернуть свой 'firstName =" "' в ветку 'else'. –

+0

'firstName =" ";' всегда выполняется, каков бы ни был результат 'valid'? – chouaib

+1

В регулярном выражении '?' Означает «ноль или один». Вы имели в виду '*', что означает «нуль или любое число» (или, возможно, '+', что означает хотя бы один раз). – Blorgbeard

ответ

3

Вам нужен еще блок.

public void setFirstName(string newFirstName) 
{ 
    bool valid; 
    valid = System.Text.RegularExpressions.Regex.IsMatch(newFirstName, "^[- a-zA-Z]*$"); 
    if (valid) 
    { 
     firstName = newFirstName; 
    } 
    else 
    { 
     firstName = " "; 
    } 
} 

Update

Ваше регулярное выражение, кажется, также неправильно, это нужно * нулевой или более вхождение вместо?. Правильное регулярное выражение =>^[- a-zA-Z]*$

Нажмите здесь, чтобы увидеть работает скрипку =>link

+0

Кроме того, регулярное выражение неверно .. см. Мой комментарий к вопросу. – Blorgbeard

+0

@Blorgbeard да, вы правильно обновили ответ. –

0

В качестве альтернативы RegEx (который я не рекомендовал бы, если вы все еще только учусь C#), вы можете использовать основной строка с LINQ и встроенным .Net char methods.

bool isValid = newFirstName.All(x => char.IsLetter(x) || x == '-' || x == ' '); 

В данном конкретном случае, All будет проверять, что каждый элемент в массиве (строка представляет собой массив символов) соответствует предикат при условии, где каждый символ:

  • должна быть буква (верхний или ниже) ИЛИ
  • должен быть прочерк «-» ИЛИ
  • должен быть пробел «»

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

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