„Regex“ neveikia tinkamai suderindama netikėtus dalykus.

Turiu šią įprastą išraišką:

 [\(\+\[]?[0-9]([\-\)\.\/-\]]?\s?\(?[0-9\s\)]){8,20}? 

Jis turėtų atitikti tik telefono numerius, tačiau jis taip pat atitinka tokius dalykus kaip:

 [95.86.22.137] 95.86.22.137 (192.168.1.94) 274.1363525390625px;"> 2014-8-720:32:45 

Ar kas nors gali man padėti išspręsti šią įprastą išraišką?

1
07 авг. user3845621 nurodytas 07 rug . 2014-08-07 17:13 '14, 17:13, 2014-08-07 17:13
ответ 1 atsakymas

Jei tikrai norite tai padaryti teisingai, norėčiau pradėti nuo pradžios ir nustatyti modelį, kurį ketinate suderinti, kuris nėra matomas jūsų įprastai išraiškai, ir nebuvo jūsų klausime - tik to, ko nenorėjote. Jūs turite tai pažvelgti kaip „ką noriu?“, O ne „ką aš bandau pašalinti?“. Padarykite tai kaip „ką aš noriu?“ ir ko jums reikia, pašalins visas šias nemalonias kitas galimybes.

Pirmiausia turite nuspręsti, ką priimsite kaip „galiojantį telefono numerį“. Atminkite, kad net NANP (Šiaurės Amerikos numeracijos plane) yra keli skirtingi formatai:

  • XXX-XXX-XXXX arba
  • XXX XXX-XXXX arba
  • 1-XXX-XXX-XXXX arba
  • (XXX) XXX-XXXX arba
  • + (XXX) XXX-XXXX arba
  • 1 (XXX) XXX-XXXX

Ir jie yra visi galiojantys numeriai, todėl jums reikės pasirinkti formatą, kurį priimtumėte. Ir likusiame pasaulyje įvairūs ilgio formatai yra nuo 9 (Portugalija) iki 13 (Pietų Korėja) skaitmenų, įskaitant šalies kodą ir tarptautinį kodą. Todėl reikia nuspręsti:

  • Ar priimsite tik NANP numerius ar kitus numerius, nepriklausančius šiam standartui?
  • Ar sutiksite „+“ arba priversti juos parašyti tarptautinį kodą? Ar jums reikės įvesti šalių, į kurias bus įvestas jūsų vartotojas, kodas, jei reikia kodo? Jei jie įveda kodą, jūsų įprastinė išraiška galės apdoroti (jei tai priimtina) arba raudoną vėliavą (jei tai nepriimtina), ką?
  • Ar nukopijuosite skliaustelius aplink vietovės kodą, tiesiog leiskite jiems (padaryti skliaustelius neprivalomus) arba tiesiog juos išmesti?

Ir paskutinę pastabą, kad skirtingose ​​šalyse pagal jų skaičių yra skirtingų vietų skliausteliai, t.y. Meksikoje yra 2 skaitmenų vietovės kodai (beje, NANP).

Ir nepamirškite, kad kiekvieną kartą, kai priimate sprendimus, kuriems reikalingas simbolis, atsisakote kitų galimų galiojančių telefono numerių, nebent leisite kitiems galiojantiems simboliams toje lizdoje. Štai kodėl nėra nė vieno jūsų problemos sprendimo. Dėl šios priežasties daugelis jums pasakys tik „+“, „(“, “),„ - “, o tada skaičiuokite. Tačiau tai nepavyksta, jei manote, kad „NANP“ numeryje „1“ yra privaloma, tačiau kažkas neįtraukia (nes paprastai NANP yra neprivaloma) arba kai skirtingose ​​šalyse jų skaičius yra skirtingas - net savo šalyje. kaip Naujoji Zelandija.

Yra vadinamasis išsamus vadovas: visiškas reguliarus išraiškos telefono numerių tikrinimas

Bet man buvo labai trūksta, kaip padaryti asmenį „+“ prieš „1“ ir tarpą (NANP numeriams), kaip naudoti skliaustelius, brūkšnelius ir tt Tai suteikia jums reguliarias išraiškas, o ne paaiškinimą, kaip jus ten patekti. Iš čia mano „dienoraštis“ yra atsakymas.

Toliau pateikiama mano NANP eilutės reguliarioji išraiška, kuri bus naudojama:

  • + (XXX) XXX-XXXX
  • 1 (XXX) XXX-XXXX
  • (XXX) XXX-XXXX

Tam reikalingi skliausteliai ir brūkšneliai, kurie, mano nuomone, NANP numeriams suteikia daugiau lankstumo, kai standartas yra įvykdytas. Deja, nesusiję su tarptautiniais (ne NANP) numeriais:

 /^(\+|1\s)?[(][2-9]\d{2}[)][\s][2-9]\d{2}-\d{4}$/ 

/^ = atitiktis žodžio pradžioje; iš esmės tiesiog reiškia išraiškos pradžią

(+ 1)? grupę

  • Skliaustai naudojami grupei kompensuoti ir pasakyti, kad bet koks viduje esantis simbolis yra neprivalomas ? pabaigoje ir išspręskite būklę arba jos viduje (žr. kanalo simbolį)
  • \+ = Ran "+", kad būtų galima suderinti pliuso ženklą (jis turi būti ištrūkęs, nes jis yra raktinis simbolis reguliarioje išraiška naudojant backslash)
  • | = vamzdžio simbolis, sakydamas, kad jis turi atitikti kairę arba dešinę grupės viduje
  • 1\s = skaičius 1 ir erdvė. Erdvė nėra reikalinga [] - ji man neveikė, nors mačiau kitus pranešimus, kurie, atrodo, tai rodo. Tai yra.

[(] = Štai kaip jūs nurodote, kad reikia atidaryti kronšteiną.

[2-9] d {2} grupė

  • [2-9] = Tai reiškia, kad išraiška atitinka skaičių 2-9. Taip yra dėl to, kad NANP 0 ir 1 yra negaliojantys numeriai rajono kodo pradžioje (pirmasis 3 numerių rinkinys) arba telefonų mainuose (antrasis 3 skaitmenų rinkinys).
  • \d{2} = Tai reiškia, kad leisti 2 skaitmenis nuo 0 iki 9. Tai trumpas [0-9][0-9] .

Trijų skaitmenų grupei iš 000-999 tiesiog pasakykite: \d{3}

[)] = Štai kaip jūs nurodote, kad reikalingas uždaras skliautas.

[\s] = Tam reikės vietos.

[2-9] d {2} - d {4} grupė

  • Ši pirmoji dalis prieš brūkšnelį yra panaši į ankstesnę.
  • Čia reikia nustatyti brūkšnelį. Jei įdėti -? , tai bus neprivaloma.
  • \d{4} = Tai leidžia 4 skaitmenis nuo 0 iki 9. Tai trumpas [0-9][0-9][0-9][0-9]

$/ = Sako, kas atitinka žodžio pabaigą; iš esmės tiesiog reiškia išraiškos pabaigą.

Tikiuosi, kad tai padės sukurti savo išraišką.

1
14 авг. atsakymą pateikė vapcguy 14 rug . 2014-08-14 04:13 '14 at 4:13 2014-08-14 04:13

Kiti klausimai apie „ žymes arba „ Užduoti klausimą“