2012-06-07 13 views
5
function validInteger(theNumber){ 
    var anyNonDigits = new RegExp('\D','g'); 
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

Powyższa funkcja jest funkcją napisaną w celu sprawdzenia poprawności niektórych danych wejściowych. Chcę wszystkie liczby całkowite dodatnie. Problem z którym stoję jest związany z obiektem RegExp. Wygląda na to, że powinno być super proste, ale z jakiegoś powodu nie działa.Używanie wyrażenia regularnego do sprawdzenia, czy dane wejściowe mają w nim wpisane cyfry niebędące cyframi

Na przykład, jeśli przekażę "f5", otrzymam prawdę, ale jeśli przekażę "5f", otrzymam fałsz. Mam również problemy z przekazywaniem liczb ujemnych. -3 nie zostanie złapany, nawet jeśli zmienię łańcuch przed przekazaniem go do RegExp. Mogę to naprawić, dodając "&&parseInt(theNumber)>0" w mojej instrukcji if, ale mam wrażenie, że RegExp również to powinno złapać. Z góry dziękuję!

+1

Wyrażenie regularne nie działa, ponieważ trzeba uciec od znaku '\ ', ponieważ' \ 'ma również znaczenie w notacji literowej ciąg. 'nowy RegExp ('\\ D', 'g');' –

+0

... również nie musiałbyś używać modyfikatora 'g', ponieważ brzmi to tak, jakby nawet jedna cyfra mogła wystarczyć do oznaczenia wkład. –

+0

@amnotiam dzięki za informację, dlaczego to, co robiłem, nie działa. Wyrażenia regularne są czymś, do czego wciąż jestem nowy. Mam nadzieję, że wkrótce to zmienię. –

Odpowiedz

11

prostu:

function validInteger(theNumber){  
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0; 
} 

Live DEMO

Albo jeszcze prościej z regex tylko jako sugerowane przez @Eric:

return /^[0-9]\d*$/.test(theNumber); 

Live DEMO

Aktualizacja:

An excellent cheat sheet.

+0

Nie ma potrzeby stosowania 'parseInt (theNumber)> 0':'/^ [1-9] \ d * $/' – Eric

+0

@Eric. Dzięki za sugestię, dodałem to z twoim imieniem. – gdoron

+0

Myślę, że regex nazwałby pusty ciąg ważny, ponieważ '*' jest "zero lub więcej", możesz użyć '+' zamiast "jednego lub więcej" – jbabey

1

Jeśli jest w porządku nie używać RegExp, można mieć:

function validInteger(theNumber){ 
    var number = +theNumber; 

    return number > -1 && number % 1 === 0; 
} 

Zakładając, że rozważyć 0 jako liczba całkowita dodatnia, i nie chcesz, aby dokonać rozróżnienia między +0 i -0.

Należy zauważyć, że ta funkcja akceptuje dowolną wartość dla theNumber, która może być przekształcona w liczbę, więc nie tylko "ciąg", i oczywiście można również przekazać numer.

+0

Prawdopodobnie masz na myśli '-1

+1

Tak, przepraszam, moja literówka. :) – ZER0

+0

@amnotiam. Czy jest jakaś różnica (wiem, że robią różne rzeczy) pomiędzy 'if (str.match()) 'i' if (/.../. test (str)) '? – gdoron

0

Bądź prosty!

function validate(num){ 
    return (num | 0) > 0; 
}; 

Ta funkcja zwróci wartość "prawda" tylko dla dodatnich liczb całkowitych.

+1

Zależy od tego, jak chcesz ocenić zapis szesnastkowy. '('0xff' | 0)> 0; // true' –

+1

'(" +123 "| 0)> 0' =>' true' => broken ... ':)' – gdoron

Powiązane problemy