2012-06-18 2 views
0
Match match = Regex.Match("555-5555555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None); 
it["Should match"] =() => match.Success.should_be_true(); 

Вышеупомянутый должен соответствовать, я верю. Я требую номера, но оставляю дефисы как необязательные. Тем не менее, приведенное выше возвращает false и не проходит тест.Попытка сопоставить простой номер телефона C# Regex

Редактировать

Принимается ответ, как Дарин правильно, что-то не так с моей тестовой области. Вот мой обновленный код:

Match match; 
    void describe_example() 
    { 

     context["goodregex"] =() => 
     { 
      before =() => match = Regex.Match("555-5555555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None); 
      it["Should match"] =() => match.Success.should_be_true(); 
     }; 

     context["badregex"] =() => 
     { 
      before =() => match = Regex.Match("555-5525-5555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None); 
      it["Should not match"] =() => match.Success.should_be_false(); 
     }; 

    } 
+2

'match.Success' истинно на моей машине. – dtb

+0

То же самое здесь :) Он возвращает true. Btw Я рекомендую использовать оператор «как есть» (или verbatum) при написании строки Regex. Это очень запутанно: '@"^(\ d {3} \ -? \ D {3} \ -? \ D {4}) $ "' –

+0

Является ли 'it [" Should match "]' когда-либо установленным на предоставленная линия? –

ответ

1

Следующей программа печатает настоящую:

class Program 
{ 
    static void Main() 
    { 
     var match = Regex.Match("555-5555555", "^(\\d{3}\\-?\\d{3}\\-?\\d{4})$", RegexOptions.None); 
     Console.WriteLine(match.Success); 
    } 
} 

Я думаю, вы имеете некоторый обобщающий вопрос в тестовом модуле, где переменная match модифицируются при выполнении тестов одновременно.

+0

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

+0

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

1

Ваш RegEx работает правильно на моей машине. Для регулярных выражений, что подтвердить различные типы телефонных номеров, пожалуйста, смотрите здесь (можно сравнить с вашими потребностями и выбрать наиболее подходящий):

http://www.regexlib.com/Search.aspx?k=phone&AspxAutoDetectCookieSupport=1

+1

Я не иллюстратор, но, пожалуйста, не отправляйте ** только ** ссылки. Укажите также краткое объяснение примера содержимого или кода Giva. – Tigran

+0

Ну, RegEx правда, поэтому вы хотите, чтобы я опубликовал что? –

+0

Я имею в виду ваш пост. Если вы делаете сообщение, это означает, что вы ** ответите ** на вопрос. Если вы ** ответите **, вопрос будет более decriptive, а не только ссылки. То есть. – Tigran

0

Регулярное выражение выглядит хорошо для меня. А ведь на моей машине действительно match.Success. Я бы, вероятно, переписал регулярное выражение как:

"^(\\d{3}\\-?){2}\\d{4}$" 

Однако, это только вопрос предпочтения.

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