2010-10-18 24 views

Odpowiedz

28

można potwierdzić z tym:

/^[a-z]{2,3}(?:-[A-Z]{2,3}(?:-[a-zA-Z]{4})?)?$/ 

Oto jak to działa

^  <- Starts with 
[a-z] <- From a to z (lower-case) 
{2,3} <- Repeated at least 2 times, at most 3 
(?:  <- Non capturing group 
    -  <- The "-" character 
    [A-Z]  <- From a to z (upper-case) 
    {2,3}  <- Repeated at least 2 times, at most 3 
    (?:  <- Non capturing group 
     -   <- The "-" character 
     [a-zA-Z] <- from a to Z (case insensitive) 
     {4}  <- Repeated 4 times 
    )   <- End of the group 
    ?   <- Facultative 
)  <- End of the group 
?  <- Facultative 
$  <- Ends here 

Można również zastąpić ostatni non grupę przechwytywania przez (?:-(?:Cyrl|Latn))? jeśli tylko opcje są Cyrl i Latn

+0

Dziękuję Colin Hebert i Eumiro jak również :) – SameName69

+0

Dlaczego jest to, że regex Zalecany przez jednego zdefiniowanego przez specyfikacje? –

+0

@Stephane Nie wiedziałem, że w specyfikacji występuje wyrażenie regularne. Gdzie to znalazłeś? –

6

to co znalazłem w Dublin Core/W3C XSD-tych: http://www.w3.org/2001/XMLSchema

<xs:simpleType name="language" id="language"> 
    <xs:annotation> 
     <xs:documentation 
     source="http://www.w3.org/TR/xmlschema-2/#language"/> 
    </xs:annotation> 
    <xs:restriction base="xs:token"> 
     <xs:pattern 
     value="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*" 
       id="language.pattern"> 
     <xs:annotation> 
      <xs:documentation 
       source="http://www.ietf.org/rfc/rfc3066.txt"> 
      pattern specifies the content of section 2.12 of XML 1.0e2 
      and RFC 3066 (Revised version of RFC 1766). 
      </xs:documentation> 
     </xs:annotation> 
     </xs:pattern> 
    </xs:restriction> 
    </xs:simpleType> 

Następnie wzór jest:

[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})* 
+1

Jeśli dodasz linie zakotwiczeń i grupę przechwytującą, stanie się to '^ [a-zA-Z] {1,8} (?: - [a-zA-Z0-9] {1,8}) * $ ' –

4

Według https://en.wikipedia.org/wiki/IETF_language_tag regexp może być:

/^[a-z]{2,3}(?:-[a-zA-Z]{4})?(?:-[A-Z]{2,3})?$/ 

Z wiki:

jednym subtag język podstawowy na podstawie dwu- kod języka w języku ISO 639-1 (2002) lub trzyliterowy kod ISO 639-2 (1998), ISO 639-3 (2007) lub ISO 6 39-5 (2008) lub zarejestrowany w procesie BCP 47 i składający się z pięciu do ośmiu liter;

opcjonalny podetykieta skrypt, w oparciu o cztery-literowego kodu skryptu z ISO 15924 (zwykle napisane w tytule przypadku);

opcjonalny podtag regionu oparty na dwuliterowym kodzie kraju z ISO 3166-1 alpha-2 (zwykle pisanym wielkimi literami) lub trzycyfrowym kodem z ONZ M.49 dla regionów geograficznych;

+0

" trzycyfrowy kod "Nie widzę żadnych znaków pasujących do cyfr w tym regex. – Triynko

-3

^(? I: AF | AX | AL | DZ | AS | AD | AO | AI | AQ | AG | AR | AM | AW | AU | AT | AZ | BS | BH | BD | BB | BY | BE | BZ | BJ | BM | BT | BO | BQ | BA | BW | BV | BR | IO | BN | BG | BF | BI | KH | CM | CA | CV | KY | CF | TD | CL | CN | CX | CC | CO | KM | CG | CD | CK | CR | CI | HR | CU | CW | CY | CZ | DK | DJ | DM | DO | EC | EG | SV | GQ | ER | EE | ET | FK | FO | FJ | FI | FR | GF | PF | TF | GA | GM | GE | DE | G | | G | | G | | GW | GY | HT | HM | VA | HN | HK | HU | IS | IN | ID | IR | IQ | IE | IM | IL | IT | JM | JP | JE | JO | KZ | KE | KI | KP | KR | KW | KG | LA | LV | LB | LS | LR | LY | LI | LT | LU | MO | MK | MG | MW | MY | MV | ML | MT | MH | MQ | MR | MU | YT | MX | FM | MD | MC | MN | ME | MS | MA | MZ | MM | NA | NR | NP | NL | NC | NZ | NI | NE | NG | NU | NF | MP | NO | OM | PK | PW | PS | PA | PG | PY | PE | PH | PN | PL | PT | PR | QA | RE | RO | RU | RW | BL | SH | KN | LC | MF | PM | VC | WS | SM | ST | SA | SN | RS | SC | SL | SG | SX | SK | SI | SB | SO | ZA | GS | SS | ES | LK | SD | SR | SJ | SZ | SE | CH | SY | TW | TJ | TZ | TH | TL | TG | TK | Z | TT | TN | tr | TM | TC | telewizji | UG | UA | AE | PL | US | JM | UY | UZ | vu | VE | VN | VG | VI | WF | EH | YE | ZM | ZW) $

+0

Podczas gdy ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga poprawić jakość twojego posta. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. Ponadto nie jest on poprawnie sformatowany i na koniec nie odpowiada na to pytanie, ponieważ format kodu kultury opisany w pytaniu jest bardziej podobny do '[a-z] {2,2} - [A-Z] {2,4}. – Clijsters

Powiązane problemy