Привета моей регулярного выражения картиныRegex для проверки внутрибрюшинен
^((?:(?:^|\.)(?:\d|[1-9]\d|1\d{2}|2[-4]\d|25[0-5])){4})$
это позволит 0.0.0.0
, но я не хочу, чтобы 0.0.0.0
пожалуйста кто-нибудь помочь мне
Привета моей регулярного выражения картиныRegex для проверки внутрибрюшинен
^((?:(?:^|\.)(?:\d|[1-9]\d|1\d{2}|2[-4]\d|25[0-5])){4})$
это позволит 0.0.0.0
, но я не хочу, чтобы 0.0.0.0
пожалуйста кто-нибудь помочь мне
^(?=.*[1-9])((?:(?:^|\.)(?:\d|[1-9]\d|1\d{2}|2[-4]\d|25[0-5])){4})$
Вы можете сделать это через positive lookahead.
См демки.
Я знаю, что это может быть не так, но это регулярное выражение подвержено катастрофическому обратному отскоку в некоторых очень странных сценариях, подобных этому ] (https://regex101.com/r/yE3oO3/1). Возможно, строка не является пользователем и никогда не произойдет. Тем не менее, мое предложение работает нормально даже в таких случаях. Авинаш также отлично работает. В общем, я бы избегал '. *', Если это не нужно. –
@stribizhev hehehe ......... я подозреваю, что ip-адрес будет возможен в 3050 году, когда население будет миллиардами: P – vks
Просто добавьте отрицательное опережения утверждение в начале.
^(?!0+\.0+\.0+\.0+$)((?:(?:^|\.)(?:\d|[1-9]\d|1\d{2}|2[-4]\d|25[0-5])){4})$
Взгляд вперед может использоваться, чтобы установить предел длины. В этом случае это может быть довольно кратким, так как строка должна содержать только цифры и символ .
.
Таким образом, я предлагаю использовать (?![0.]+$)
, как нам нужно только проверить, если у нас нет 0
с и периоды до конца:
^(
(?![0.]+$) # Here is the look-ahead.
(?:
(?:^|\.)
(?:
\d|[1-9][0-9]|1\d{2}|2[-4]\d|25[0-5]
)
){4}
)$
См demo
^((?![0.]+$)(?:(?:^|\.)(?:\d|[1-9][0-9]|1\d{2}|2[-4]\d|25[0-5])){4})$
Это часть задания?
Если нет, то я не хотел бы использовать регулярное выражение не и предпочитать Строка # сканирование:
ip_subnets = ip.scan(/\d+/).map(&:to_i) # you can use split('.') instead of scan
ip_subnets.all? { |i| (0..255).include?(i) } &&
ip_subnets.any? { |i| i != 0 } &&
ip_subnets.size == 4
вам нужно разрешить сделать: '' 1.0.0.0', 0.1.0.0', '0.0.1.0',' 0,0 .0.1'? (другими словами, если есть только одно число, не равное нулю, может ли оно быть в любом положении?) –