#javascript #regex #validation #indicative
Вопрос:
Например, если у меня есть строка:
0123456789
Я бы написал выражение так:
0.*9 WHERE PATTERN MAX SIZE is 3. in this case, pattern should fail.
Комментарии:
1. Итак, вы ищете цифру ноль, любой символ и цифру 9, а шаблон должен соответствовать только строке из 3 символов?
2. Возможно, вы могли бы предоставить нам список строк, которые должны совпадать, и строк, которые не должны совпадать.
Ответ №1:
Конкретное решение для вашего примера таково:
/^0.?9$/
Общее решение вашего абстрактного вопроса таково:
/^(?=.{0,3}$)0.*9$/
В приведенном выше (?=.{0,3}$)
примере показано, что остальная часть строки имеет длину от 0 до 3.
Комментарии:
1. Аккуратно… никогда не думал об использовании предвидения для ограничения длины строки, хотя, вероятно, было бы проще сделать это вне регулярного выражения.
Ответ №2:
x{min,max}
будет соответствовать x между минимальным и максимальным временем
x{min,}
будет соответствовать x не менее мин раз
x{,max}
будет соответствовать x не более чем в максимальное время
x{n}
будет соответствовать x ровно n раз
Все диапазоны включены.
Ярлыки: {0,1}
=> > ?
, {0,}
=> > *
, {1,}
=> >
.
Я не уверен, что это именно то, что вам нужно, но это должно помочь вам создать регулярное выражение.
Пример: ^0d{,3}9$
будут совпадать строки не более чем с 5 цифрами, начинающимися с 0 и заканчивающимися 9. Совпадения: 0339
, 06319
, 09
. Не совпадает: 033429
, 1449
.
Комментарии:
1. Похоже, ему нужно
d{0,3}
2. @атомайзер Я думаю , что ему нужно что-то вроде
^0d?9$
, но он не знает, как об этом спросить :).3. @стефано, этот парень делает это лучше: regular-expressions.info/reference.html
4. я пытаюсь объяснить лучше 🙂 я должен создать небольшой редактор регулярных выражений. там будет поле, в котором пользователь установит «максимальный размер шаблона», поэтому, если я напишу 0.* с «максимальным размером шаблона» = 3 регулярное выражение должно учитывать только 012, а не 0123456789 я надеюсь, что мне ясно!
5. @Стефано М.: Что вы подразумеваете под «следует рассмотреть»? Вы имеете в виду «должен принять»? Можете ли вы привести пример, показывающий конкретные результаты, которые вы хотите получить для различных входных данных?
Ответ №3:
Похоже, вы хотите программно изменить регулярное выражение.
Пожалуйста, укажите язык, который вы используете (JS, Python, PHP и т.д.).
Вот как вы могли бы сделать это с помощью JavaScript:
sYourPattern = '0.*9';
iPatternMaxSize = 3;
zRegex = new RegExp ('^(?=.{0,' iPatternMaxSize '}$)' sYourPattern '
Это дает:
'9' --> Совпадения нет
'09' --> Совпадение
'009' --> Совпадение
'0009' --> Нет совпадения
'19' -->> Нет совпадения
);
alert (zRegex.test ('09') );
Это дает: