RegularExpressionValidator Regex для проверки IP-адресов (по одному на строку) в многострочном текстовом поле?
У меня есть многострочное текстовое поле, которое должно принимать только IP-адреса (по одному на строку, без разделительного символа).
Например:
10.1.20.1
10.1.20.2
До сих пор я использовал следующее регулярное выражение с RegularExpressionValidator для проверки текстового поля, но оно работает только в том случае, если в первой строке текстового поля введен один IP-адрес.
Если второй IP-адрес введен во второй строке текстового поля, проверка выражения завершится неудачно и отобразится сообщение об ошибке RegularExpressionValidator.
Мой текущий RegularExpressionValidator выглядит следующим образом,
<asp:RegularExpressionValidator runat="server" ErrorMessage="IP addresses (one per line) only please." ControlToValidate="TextBox1" ValidationExpression="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" />
Я не просто спрашиваю правильное Regex здесь (как бы это ни было полезно), но больше объяснения, которое позволило бы мне самому создать работающее Regex, пожалуйста.
1 ответ
Кажется, что весь текст должен соответствовать выражению регулярного выражения. Ваше регулярное выражение соответствует IP-адресу как целому слову. Вам нужно заменить \b
с ^
и добавьте 0+ количественную группу, соответствующую символу новой строки + IP.
Вот пример:
^ # Start of string
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
(?: # Optional - 0+ - group start
(?:\r\n|\r|\n) # linebreaks of various types
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # 0+ lines having only IP
)* # Optional group end
$ # End of string
Посмотреть демо