2016-01-09 3 views
-2

банкоматов не позволяют 4 или 6 цифр PIN-коды и PIN-коды не могут содержать ничего, кроме точно4 цифр или ровно 6 цифр.регулярное выражение имеет не метод испытания

Если функция передана действительной строкой PIN-кода, верните true, иначе верните false.

т.д .:

validatePIN("1234") === true 
validatePIN("12345") === false 
validatePIN("a234") === false 

Почему мой код не работает?

var r = new RegExp('^\\d+$'); 
function validatePIN (pin) { 
    if(pin.test(r) && pin.length == 4 || pin.length == 6){ 
    return true; 
    }else{ 
    return false; 
    } 
} 
+3

Попробуйте 'r.test (контактный) '. 'test' - это метод в RegExp, а не String. Документы указывают на это. Но почему бы не сделать '/^(\ d {4} | \ d {6}) $ /'? –

+0

Почему бы не использовать регулярное выражение ''^\\ d {4} (\\ {2})? $ ''И избавиться от теста длины? –

+1

r.test (pin) или pin.match (r) –

ответ

1

Вы должны вызвать метод test на регулярное выражение, например, а не на входе строки:

if (r.test(pin) && (pin.length == 4 || pin.length == 6)) { 

заметить также приоритет логических операторов.

+2

Вы не смогли исправить parens, должны быть 'r.test (pin) && (pin.length === 4 || pin.length === 6) '. –

+0

Это правда, я обновлю. –

2
x && y || z 

интерпретируется как:

(x && y) || z 

Он вернется true если длина даже если это нетолько цифры. Чтобы это исправить, вы можете добавить скобки:

x && (y || z) 
+0

Это проблема, но немного вторичная. Во-первых, это приведет к ошибке во время выполнения, поскольку на String не существует метода 'test'. –

+0

@torazaburo, Дарин уже указал это. Попытка быть конструктивной с другим ответом. – ndn

+0

'x && y || z Становится (x && y) || z'? – guest271314

3

Вы можете сделать все в одном регулярном выражении ..

var r = new RegExp('^(\\d{4}|\\d{6})$'); 

Так условие будет,

function validatePIN (pin) { 
return r.test(pin); 
} 
+1

или, возможно, 'return r.test (pin);' –

+0

точно ............ –

Смежные вопросы