Twoja rada zespołu to: prawie prawo, z wyjątkiem błędu, który popełnił. Gdy już dowiesz się dlaczego, nigdy tego nie zapomnisz. Spójrz na ten błąd.
/^(7|8|9)\d{9}$/
Co to robi:
^
i $
oznacza zakotwiczonych mecze, które twierdzi, że podciąg wzorca pomiędzy tymi kotwicami są cały mecz. Łańcuch będzie zgodny tylko wtedy, gdy podtekst dopasuje się do całości, a nie tylko do sekcji.
()
oznacza grupę przechwytującą przechwytującą.
7|8|9
oznacza dopasowanie jednego z następujących: 7
, 8
lub 9
. Robi to z zmianami, co robi operator rury |
- na zmianę naprzemiennie. To przejście między zmianami: Jeśli pierwsza zmiana nie jest zgodna, silnik musi powrócić przed przesunięciem wskaźnika w trakcie dopasowania naprzemiennego, aby kontynuować dopasowywanie następnej zmiany; Natomiast klasa znaków może postępować sekwencyjnie. Zobacz ten mecz na regex silnika z optymalizacje niepełnosprawnych:
Pattern: (r|f)at
Match string: carat
Pattern: [rf]at
Match string: carat
\d{9}
odpowiada dziewięciu cyfr. \d
to skrót metaznaku, który dopasowuje dowolne cyfry.
/^[7|8|9][\d]{9}$/
Spójrz na to, co robi:
^
i $
oznacza zakotwiczonych mecze, jak również.
[7|8|9]
to klasa postaci. Dowolne znaki z listy mogą być dopasowane, dlatego |
zostało dodane niepoprawnie. Dopasowuje się bez cofania.
[\d]
to klasa znaków, która zamieszkuje metaznak \d
. Połączenie użycia klasy znaków i pojedynczego metaznaku jest przy okazji kiepskim pomysłem, ponieważ warstwa abstrakcji może spowolnić dopasowanie, ale jest to tylko szczegół implementacji i dotyczy tylko kilku implementacji regex. JavaScript nie jest jednym, ale sprawia, że subpattern jest nieco dłuższy.
{9}
oznacza, że poprzednia pojedyncza konstrukcja powtarza się w sumie dziewięć razy.
Optymalny regex jest /^[789]\d{9}$/
, ponieważ /^(7|8|9)\d{9}$/
przechwytuje niepotrzebnie który nakłada spadek wydajności w większości implementacji regex (javascript stanie się jednym, biorąc pod uwagę kwestia używa słowa kluczowego var
w kodzie, to prawdopodobnie jest JavaScript). Użycie funkcji php, która działa na komputerze PCRE w celu dopasowania wstępnego, zoptymalizuje brak śledzenia wstecznego, ale nie jesteśmy też w PHP, więc używanie klas []
zamiast na przemian |
daje premię wydajnościową, ponieważ mecz nie cofa się, a zatem oba mecze i nie działa szybciej niż przy użyciu poprzedniego wyrażenia regularnego.
Twój członek zespołu powinien przeczytać podstawowy samouczek dotyczący wyrażeń regularnych. Druga para nawiasów jest zbędna, a '|' jest błędne - to wyrażenie zweryfikuje ciąg '" | 123456789 "'. –
'[\ d]' jest również śmieszne, użyj '\ d' bezpośrednio. ponieważ '\ d' jest skrótem od' [1234567890] ' – Eddy