Регулярное выражение для проверки числа диапазона
1.Регулярное выражение для проверки принадлежности пятизначного числа диапазона [10311; 89645].
2.Написать регулярное выражение для проверки правильности ввода имени. Имя имеет вводиться с большой буквы.
- ^(10311|\d[0-9]\d|89645)$
Ответы (2 шт):
- Диапазон
с математикой (можно заменить [0-9] на \d)
^(1[0-9]{1}[3-9]{1}[1-9]{2})|([2-7]{1}[0-9]{4})|(8[0-9]{1}[0-6]{1}[0-4]{1}[0-5]{1})$
без математики
^[1-8]{1}[0-9]{1}[3-6]{1}[1-4]{1}[1-5]{1}$
- Имя
Без дефиса
^[A-ZА-Я]{1}[a-zа-я]+$
С дефисом
^[A-ZА-Я]{1}[a-zа-я]+(-[A-ZА-Я]{1}[a-zа-я]+)*$
Выражения написаны из расчета одно значение в одной строке.
Для проверки диапазона я сочинил такое:
string pattern =
@"^ (1031[1-9] | 103[2-9]\d | 10[4-9]\d{2} | 1[1-9]\d{3} | [2-7]\d{4} | [8][0-8]\d{3} | 89[0-5]\d{2} | 896[0-3]\d | 8964[0-5]) $";
bool result = false;
for (int n = 0; n < 10311; n++)
{
result = Regex.IsMatch(n.ToString(), pattern, RegexOptions.IgnorePatternWhitespace);
if (result)
{
Console.WriteLine(n);
break;
}
}
Console.WriteLine(result);
for (int n = 10311; n <= 89645; n++)
{
result = Regex.IsMatch(n.ToString(), pattern, RegexOptions.IgnorePatternWhitespace);
if (!result)
{
Console.WriteLine(n);
break;
}
}
Console.WriteLine(result);
for (int n = 89646; n < 1_000_000; n++) // int.MaxValue
{
result = Regex.IsMatch(n.ToString(), pattern, RegexOptions.IgnorePatternWhitespace);
if (result)
{
Console.WriteLine(n);
break;
}
}
Console.WriteLine(result);
Выдаёт False, True, False, что означает корректность регулярки.
Желательно в последнем цикле поставить значение int.MaxValue, но ждать завершения придётся долго.
Для проверки имён можно использовать категории юникода.
@"^\p{Lu}\p{Ll}+$"
где Lu - буква в верхнем регистре, Ll - буква в нижнем регистре.
Тут имеются в виду буквы любых алфавитов мира.