Yapılan hata dışında ekibinizin tavsiyesi neredeyse doğrudur. Nedenini bulduğunuzda asla unutmayacaksınız. Bu hataya bir bakın.
/^(7|8|9)\d{9}$/
Bu ne yapar:
^ve $bağlantılı eşleşmeleri belirtir, bu da bu çapalar arasındaki alt modelin tüm eşleşme olduğunu iddia eder. Dize, yalnızca bir bölümle değil, alt şablonun tamamıyla eşleşirse eşleşir.
()bir yakalama grubunu belirtir .
7|8|9ya eşleşen belirtmektedir 7, 8ya da 9. Bunu dönüşümlü olarak yapar , bu da boru operatörünün |yaptığı şeydir - dönüşümler arasında dönüşümlü olarak. Bu, dönüşümler arasında geriye doğru izler: İlk değişim eşleşmezse, motor, bir sonraki dönüşümle eşleşmeye devam etmek için, dönüşümün eşleşmesi sırasında işaretçi konumu hareket etmeden önce geri dönmelidir; Oysa karakter sınıfı sırayla ilerleyebilir. Optimizasyonların devre dışı bırakıldığı bir normal ifade motorunda bu eşleşmeyi görün:
Pattern: (r|f)at
Match string: carat

Pattern: [rf]at
Match string: carat

\d{9}dokuz basamakla eşleşir. \dherhangi bir rakamla eşleşen kısaltılmış bir meta karakterdir.
/^[7|8|9][\d]{9}$/
Ne yaptığına bakın:
^ve $bağlantılı eşleşmeleri de gösterir.
[7|8|9]bir karakter sınıfıdır . Listeden herhangi bir karakter 7, |, 8, |, ya da 9bu şekilde, uyumlu olabilir |yanlış ilave edildi. Bu geri izleme olmadan eşleşir.
[\d]meta karakterde yer alan bir karakter sınıfıdır \d. Bu arada, bir karakter sınıfının ve tek bir meta karakterin kullanımının birleşimi kötü bir fikirdir, çünkü soyutlama katmanı eşleşmeyi yavaşlatabilir, ancak bu yalnızca bir uygulama ayrıntısıdır ve yalnızca birkaç normal ifade uygulaması için geçerlidir. JavaScript bir değildir, ancak alt şablonu biraz daha uzun hale getirir.
{9} önceki tek yapının toplamda dokuz kez tekrarlandığını gösterir.
Optimal normal ifade olduğu /^[789]\d{9}$/için, /^(7|8|9)\d{9}$/yakalar gereksiz en düzenli ifade uygulamaları ile ilgili bir performans düşüşü (getirir kijavascriptsoru varkodda anahtar kelime kullandığını düşünürsek , bu muhtemelen JavaScript'tir). Kullanımıphppreg eşleştirmesi için PCRE üzerinde çalışan, geri izleme eksikliğini ortadan kaldıracaktır, ancak biz de PHP'de değiliz, bu nedenle []alternatifler yerine sınıflar kullanmak |, maç geri dönmediğinden performans bonusu verir ve bu nedenle hem eşleşir hem de sizin kullanmaktan daha hızlı başarısız olur. önceki normal ifade.
(7|8|9)ve[789]eşdeğer değildir, çünkü ilki yakalar, ikincisi değildir.(?:7|8|9)öte yandan eşdeğer olacaktır (elbette bunu biliyorsunuz sanırım ...).