2009-07-23 4 views
4

У меня нет никаких проблем с подходящим регулярным выражением или набором регулярных выражений.Регулярное выражение Javascript для обнаружения возможных номеров кредитных карт

Что я хочу сделать, это обнаружить:

  • Detect contineous пробег цифр длиной 13 до 19
  • Detect contineous пробег цифр перемежаются с пробелами длиной 13 до 19
  • Detect contineous пробег цифр, чередующихся с тире длиной от 13 до 19

Основная задача бизнеса - предупредить пользователя о том, что они могут ввести номер кредитной карты i n текстовое поле, и они не должны этого делать (хотя только предупреждение, а не жесткая ошибка). Текстовое поле может охватывать несколько строк, может быть длиной до 8 тыс., CC# может быть встроен в любом месте (вряд ли разбить на несколько строк), может быть больше 1 CC# (хотя обнаружение prescence не менее 1 равно все, что мне нужно, мне не нужно фактическое значение). Не нужно проверять контрольную цифру.

Проверка длины может быть выполнена внешней ... т. Е. Я счастлив пройти через набор совпадений, удалить любые пробелы/дефисы, а затем выполнить сравнение по длине.

Но ... JavaScript регулярное выражение побеждая все мои попытки (только не в правильном «свободном пространстве»), поэтому я думал, что я здесь спросить :)

Спасибо!

+1

Это кажется действительно странным требованием. Итак, если я правильно понимаю, у вас есть веб-страница с полями формы. Ни одно из этих полей не относится к полям кредитных карт, но по какой-то причине вы хотите удостовериться, что номер кредитной карты не был введен ни в один из них ... Я предполагаю, что это на всякий случай, когда пользователь запутался в вашем пользовательском интерфейсе и подумали, что им нужно ввести какую-то информацию о платежах? – NotMe

+0

@chirs lively: Почти все правильно :). Это скорее сценарий рабочего процесса, и кто-то может решить добавить примечание, которое включает в себя клиентский cC# (не поймите меня неправильно, это звучит для меня тоже ... но что вы собираетесь делать?). Итак ... всплывающее предупреждение, напоминающее людям «пожалуйста, не делай этого», похоже, не совсем необоснованно. – user53794

ответ

1

Похоже на довольно простое регулярное выражение. Я сделал ваши требования немного более строгими - так было, вы бы соответствовали спискам дат, таких как «1999-04-02 2009-12-09 2003-11-21». Я предположил, что разделы будут состоять из трех-шести групп и сами будут группами из трех-восьми чисел/тире/пробелов. Вы можете легко настроить эти номера.

/[0-9]{13,19}|([0-9- ]{3,8}){3,6}/ 

Я не уверен, что это то, что вы хотите, но я подумал, что это стоит того. Если это не то, что вы ищете, возможно, вы могли бы показать нам несколько регулярных выражений, которые приближаются или дают представление о том, что вы хотите?

0
/(?:\d[ -]?){12,18}\d/ 

Проверки на 13-19 цифр, каждая из которых (кроме последней) может иметь пробел или тире после нее. Это очень либеральное регулярное выражение, и вы можете сузить его до известных форматов кредитных карт.

1

Вы хотите регулярное выражение 8k текста с помощью Javascript? Не тратьте свое время (или плохой процессор CPU) на это с помощью Javascript. В любом случае вам понадобится проверка на стороне сервера, так что просто оставьте это.

+0

8K - верхний предел, и вряд ли он будет достигнут. Я бы не подумал, что регулярное выражение против 8K принесет ПК на колени на какое-то время. Вы уверены в этом? – user53794

+0

Суть в том, что требуется проверка на стороне сервера. Вы получаете очень мало, подвергая клиента таким операциям. –