RegExp - cały czas zwraca false

0

Witajcie,
Myślałem że uda mi się rozwiązań problem samemu ale niestety. Mam pewną metodę która sprawdza mi czy wprowadzona liczba jest z przedziału 1 - 21 (dni miesiąca). Sprawdzenie odbywa się poprzez wyrażenie regularne. Metoda wywołana z poziomu konsoli przeglądarki działa super, wywoływana ze strony, cały czas zwraca false. Już nie mam pomysłów o co chodzi. Tak ona wygląda:

function(pattern, int){
    var pat = new RegExp(pattern)
    if( pat.test(int)){
        console.log('jestem w if');
        alert('Wprowadzona wartość musi być z przedziału 1 - 31')
    }  
    else{
    console.log('jestem w else');  
    }
}

Tak wygląda mój pattern który podaję do metody:

pattern = '^(3[01]|[12][0-9]|[1-9])$'

Natomiast jeśli chodzi o wartość int to jakiejkolwiek nie podam to zawsze wchodzi z else. Natomiast tak jak napisałem, identyczna metoda, jeden do jednego, wywołana z konsoli działa bez najmniejszego problemu. Ratujcie bo mi już pomysłów brakuje.

0

A po co do muchy strzelać z armaty?

function test(n) {
  return 1 <= n && n <= 31
}

Co do twojego kodu, to wstaw sobie debugger i zobacz co tam się dzieje:

function test(pattern, int){
    debugger;  // <--- to nam zatrzyma wykonywanie kod i będziesz mógł podejrzeć, czy wszystko się zgadza
    var pat = new RegExp(pattern)
    if( pat.test(int)){
        console.log('jestem w if');
        alert('Wprowadzona wartość musi być z przedziału 1 - 31')
    }  
    else{
    console.log('jestem w else');  
    }
}
0

Nie no jasne że można i tak ale ja to zrobiłem nie bez powodu. Mam jeszcze kilka innych pól gdzie sprawdzam walidację np na długość znaków czy na poprawność (kod pocztowy) i żeby nie pisać do każdej kontrolki osobnej metody to zrobiłem sobie jedną generyczną którą będę wywoływał przy każdej walidacji i tylko na wejściu będę podawał jej patterna, wpisaną na ekranie wartość oraz docelowo (póki co jeszcze tego nie ma) komunikat jaki ma wyświetlać w alercie bo będzie różny w zależności od walidacji. I dzięki temu mam załatwione wszystkie sprawdzenia poprawności danych jedną metodą.

0

Metoda wydaje się ok. Może zaloguj lub sprawdź debuggerze wartość int, bo jest czymś innym niż oczekujesz.

0

Oczywiście debbuger-em już sprawdzałem. I w mojej zmiennej pat siedzi coś takiego: /^(3[01]|[12][0-9]|[1-9])$/ czyli poprawnie, wpisana wartość to 0 i też dobrze ją odczytał, w momencie kiedy dochodzi do instrukcji if, to nie wchodzi wewnątrz tylko od razy przeskakuje do else czyli tak jakby uznał że 0 jest poprawną wartością z przedziału 1 - 31. Natomiast w konsoli zwraca że nie jest. I weź tu bądź mądry.

0

pat i pattern jest ok, skoro z konsoli działa. Chodziło mi o wartość int bo to testujesz. Być może z inputa czy innego źródła przychodzi coś innego niż Ci się wydaje.

0

Jest to co wpiszę. Na milion procent. Nawet robiłem console.log(int) i wyświetla dokładnie wartość którą wpisuje.

0
function test(pattern, int) {
	var pat = new RegExp(pattern)
		
	if( pat.test(int)){
		console.log('jestem w if')
		alert('Wprowadzona wartość musi być z przedziału 1 - 31');
	}  else {
		console.log('jestem w else');  
	}
}

	
$('#btn').click(function(){
    test('^(3[01]|[12][0-9]|[1-9])$', $("#input").val());
});

Wchodzi do if

1 użytkowników online, w tym zalogowanych: 0, gości: 1