using NUnit.Framework;
using System.Text.RegularExpressions;
[TestFixture]
public class RegexTests
{
struct TestCase
{
public readonly string Input;
public readonly bool ExpectedValue;
public TestCase(string input, bool expectedValue)
{
Input = input;
ExpectedValue = expectedValue;
}
public override string ToString()
{
var retval = string.Format(
"Input: {0} Expected: {1}",
Input,
ExpectedValue
);
return retval;
}
}
[Test]
public void TestEmail()
{
var regex = new Regex(@"^\w+\@\w+\.\w+\z");
var testCases = new[]
{
new TestCase("mailaccount@mail.ru", true),
new TestCase("mailaccount", false),
new TestCase("mailaccount@firstleveldomain", false),
new TestCase("12345@mail.ru", true),
new TestCase("invalid!account@mail.ru", false),
new TestCase("acc_with_underline@mail.ru", true)
new TestCase("acc@mail.", false),
new TestCase("acc@.ru", false),
new TestCase("@mail.ru", false)
};
foreach (var testCase in testCases)
{
var isMatch = regex.IsMatch(testCase.Input);
Assert.AreEqual(testCase.ExpectedValue, isMatch);
}
}
}
Фильтрация введённых символов
Какие решения вы предложите для "фильтрации базара"?:)
шаблоны и
Желательно привести алгоритм(желающие могут привести код:))
Простейший вариант - последовательное сравнение каждого символа строки либо с массивом допустимых символов, если он сложный, либо проверка вхождения символа в диапазон допустимых, если это происходит быстрее.
Цитата: @pixo $oft
Неее,ответ не в таком виде подразумевался.Эти 2 слова не каждому что-то скажут
Скажут. Вот что удалось нагуглить по "регулярные выражения e-mail":
Цитата:
В качестве первого примера, рассмотрим функцию на C++, которая проверяет, может ли заданная строка являться корректным адресом электронной почты:
Код:
#include <string>
#include <boost/regex.hpp>
bool can_be_email( const std::string & s ) {
static const boost::regex e("[a-zA-Z0-9_\\.]+@([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4}");
return boost::regex_match( s, e );
}
#include <boost/regex.hpp>
bool can_be_email( const std::string & s ) {
static const boost::regex e("[a-zA-Z0-9_\\.]+@([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4}");
return boost::regex_match( s, e );
}
IMHO, всё не так уж сложно. Источник здесь
В общем,у меня есть свой алгоритм решения этой задачи в исходниках.Просьба просмотреть и опробовать…и не ругать сильно,как-никак,я только учусь:)
Далее по поводу улучшения у меня есть вопросы,их задам позже.Благодарю за внимание