#javascript #regex
#javascript #регулярное выражение
Вопрос:
Я изо всех сил пытаюсь найти и придумать регулярное выражение, которое запрещает несовместимые символы в кредитных картах.
d{4}[s-]*d{4}[s-]*d{4}[s-]*d{4}
Например, приведенное выше регулярное выражение позволяет передавать приведенное ниже. Последнее является проблематичным, поскольку оно содержит ‘-‘ и ‘ ‘ и «. Как мне придумать регулярное выражение, которое требует, чтобы все символы (‘-‘ или ‘ ‘ или «) были последовательно одинаковыми? т. Е. разрешать только первые 3, но не последнее утверждение.
1234123412341234, 1234-1234-1234-1234, 1234 1234 1234 1234, 1234-12341234 1234
Комментарии:
1. Вы уверены, что имеете в виду
[s-]*
разрешение » -» или «-«. Может быть , ты хочешь[s-]?
.2.Если вы не хотите сопоставлять новую строку и один пробел, табуляцию или дефис
bd{4}([ t-]?)d{4}1d{4}1d{4}b
regex101.com/r/sIv8AM/1
Ответ №1:
Вы можете использовать группу захвата, чтобы «запомнить», каким был разделитель в первом случае, и убедиться, что в других случаях он также используется.
Окончательное регулярное выражение: d{4}([s-])*d{4}1*d{4}1*d{4}
()
Вокруг первой [s-]
запускается группа захвата; более 1
позднее указывает на использование того же значения, которое было записано ранее.
Посмотрите это в действии здесь https://regexr.com/5l74g
Редактировать: согласно комментариям, лучшим решением может быть d{4}([s-]?)d{4}1d{4}1d{4}
, в зависимости от того, каковы именно ваши требования. Это гарантирует, что -
s и
s не смешиваются, а также что есть только разделители 0 или 1.
Комментарии:
1. 1 * не совсем правильно, таким образом, 1234 12341234 1234 проскальзывает
2. Достаточно справедливо! В зависимости от точного поведения, которое вам нужно,
d{4}([s-]*)d{4}1d{4}1d{4}
может быть более подходящим (*
внутри группы)3. На это я хотел ответить, но вы были быстрее 🙂
4. @Alex Большое спасибо! Пытался найти этот ответ. Я думаю, что d{4}([s -]*) d{4} 1 d {4} 1 d {4} — лучший ответ для кредитных карт, если я могу добавить, было бы более полным изменить
*
внутри grp на?
, поскольку первое вызывает разрешение 1234—1234—1234—1234. Приветствия 🙂