2013-06-06 8 views
10

Potrzebuję sprawdzić niektóre wejścia za pomocą wyrażenia regularnego.JavaScript regex do sprawdzenia, czy numer zaczyna się od wiodącego zera

Oto niektóre przykładowe przypadki użycia i oczekiwane wyniki.

0001  - Matched 
001  - Matched 
01  - Matched 
00.12312 - Matched 
000.1232 - Matched 
1  - Not matched 
20  - Not matched 
0.1  - Not matched 
0.123123 - Not matched 

Jak wyglądałoby to wyrażenie regularne? Jeśli pierwszy znak to 0, a drugi znak to numerical[0-9], jest on nieprawidłowy.

Próbowałem tego, ale to nie działa.

[0][0-9] 
+0

Co o 00,1234 000,1234 i etc? –

+0

Oba są dopasowane, a także mają "0" jako pierwszy znak, a '0-9' jako drugi znak. – sergserg

Odpowiedz

10

Spróbuj regex:

^0[0-9].*$ 

Będzie pasować do wszystkiego począwszy od 0, po którym następuje cyfra.

"Dopasuje" to, co nazywasz "nieprawidłowym".

Kod Badanie powinno uczynić go bardziej przejrzyste:

var regExp = /^0[0-9].*$/ 
console.log(regExp.test("0001")); // true 
console.log(regExp.test("001")); // true 
console.log(regExp.test("01")); // true 
console.log(regExp.test("00.12312")); // true 
console.log(regExp.test("000.1232")); // true 
console.log(regExp.test("1")); // false 
console.log(regExp.test("20")); // false 
console.log(regExp.test("0.1")); // false 
console.log(regExp.test("0.123123")); // false 
+0

Możesz pominąć '. * $', Ponieważ ta część zawsze pasuje do – user123444555621

+0

@ Pumbaa80 fajne, dziękuję! To specyficzne dla metody badania, prawda? – acdcjunior

+0

Nie, '. *' Pasuje do wszystkiego. Zatem dodanie ". * $" Na końcu RE oznacza: testowana linia powinna kończyć się ... cokolwiek! Może być użyteczne w wieloliniowych RE, w których 'foo. * $ Bar' pasowałoby, gdy jedna linia zawiera' foo', a następna zaczyna się od 'bar'. Jest to odpowiednik 'foo. *^Bar' – user123444555621

2

można użyć mniej więcej tak: -

var a = "0001"; 
/^[0][0-9]/.test(a) 
+0

To wymaga wyceny, w przeciwnym razie JS usunie początkowe zera z liczby (1): var a = "0001"; –

+0

:) :). Zapomniałem dodać cytatów – pvnarula

3

można spróbować ten wzór, pomysł jest użycie kotew ^ (dla zacząć) i $ (na końcu), aby ograniczyć wynik na czego szukasz:

^0+\d*(?:\.\d+)?$ 
1
0+[1-9][0-9]* 

zestawienia przynajmniej jedno zero, a następnie przez niezerową cyfry, a następnie dowolną liczbę cyfr. Nie pokrywa się samotny 0.

1

ten jeden:

/0\d+/.test("0001") 
// true 

Jeśli "0" musi być pierwszym znakiem następnie:

/^0\d+/.test("0001") 
Powiązane problemy