1. меняйте подход с литературного на технический:
number_1 = obj.number - 1; // это значит что typeof obj.number == 'number' и из него вычитается единица
number_1 = obj["number-1"].value // и не забывайте что в obj по name можно найти элементы но не значения элементов
2. Если нужны все поля в целости достаточно одной переменной
valid = true
, при нарушении одного из условий = false
3. не нужно отправлять не корректные данные -
if (!valid) alert('пытайтесь снова')
, но на сервере, в рамках безопасности, проверять обязательно!
p.s.
var holder_pattern = /^[A-Z][a-z][a-z][a-z]+\s[A-Z][a-z][a-z][a-z]+$/i,
number_pattern = /^[0-9]{4}$/,
cvc_pattern = /^[0-9]{3}$/,
меняйте на
var holder_pattern = /^[A-Z][a-z]{3,}\s[A-Z][a-z]{3,}$/,
number_pattern = /^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$/,
cvc_pattern = /^[0-9]{3}$/,
а лучше юзайте html pattern (всё равно фронтэнд как ни крути)
p.p.s я бы так делать не стал вообще, подход как по мне слишком олд скульный