shExpMatch din PAC folosește metacaractere, nu expresii regulate
O regulă de proxy poate părea corectă, dar să nu se potrivească niciodată, deoarece shExpMatch și expresiile regulate JavaScript folosesc limbaje de model diferite.
În PAC, shExpMatch folosește metacaractere în stil shell. Pentru subdomeniile lui example.com:
if (shExpMatch(host, "*.example.com")) {
return "PROXY proxy.example:8080";
}Folosiți în aceste valori returnate punctele finale HTTP alese de politică; lista de proxy HTTP oferă candidați pentru rutele publice permise. Asteriscul corespunde unei secvențe de caractere. Nu este un operator de repetare al expresiilor regulate, așa că un .*example.com care arată ca un regex schimbă sensul.
Includeți numele exact al părintelui în mod explicit când face parte din politică:
if (host === "example.com" || shExpMatch(host, "*.example.com")) {
return "PROXY proxy.example:8080";
}Folosirea lui *example.com în schimb ar accepta și nume care se termină cu acele litere fără un punct separator. Asta lărgește mulțimea dincolo de granița de domeniu dorită.
Baza portabilă de metacaractere PAC include * și ?; clasele de caractere variază în funcție de implementare. Un regex JavaScript folosește în schimb test() și propriile reguli de ancorare și escapare.
Potriviți intrarea dorită. host este un nume de gazdă, în timp ce url include o schemă și poate fi fost sanitizat. O regulă de domeniu nu ar trebui să depindă accidental de o cale pe care browserul nu o furnizează niciodată.