2010-10-18 12 views

Antwort

28

Sie können mit dieser Validierung:

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

Hier ist, wie es funktioniert

^  <- 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 

Sie können auch die letzte nicht einfangende Gruppe von (?:-(?:Cyrl|Latn))? ersetzen, wenn die einzigen Optionen sind Cyrl und Latn

+0

Danke Colin Hebert und Eumiro auch :) – SameName69

+0

Warum ist dieser Regex über den durch die Spezifikationen definiert? –

+0

@ Stephane Ich wusste nicht, dass es in den Spezifikationen einen regulären Ausdruck gab. Wo hast du es gefunden? –

6

Dies ist, was ich in der Dublin Core/W3C Xsd gefunden: 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> 

Dann wird das Muster:

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

Wenn Sie Zeilenanker und eine nicht einfangende Gruppe hinzufügen, wird es zu^^ [a-zA-Z] {1,8} (?: - [a-zA-Z0-9] {1,8}) * $ ' –

4

Nach https://en.wikipedia.org/wiki/IETF_language_tag der regexp sein kann:

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

Wiki:

einer einzigen Subtag Primärsprache auf der Basis eines zwei- Buchstabencode aus ISO 639-1 (2002) oder Code aus drei Buchstaben aus ISO 639-2 (1998), ISO 639-3 (2007) oder ISO 6 39-5 (2008), oder registriert durch den BCP 47-Prozess und bestehend aus fünf bis acht Buchstaben;

ein optionales Skript-Subtag, basierend auf einem vierstelligen Skriptcode aus ISO 15924 (normalerweise im Titelfall geschrieben);

ein optionaler Regionssubtag basierend auf einem aus zwei Buchstaben bestehenden Ländercode aus ISO 3166-1 Alpha-2 (normalerweise in Großbuchstaben geschrieben) oder einem dreistelligen Code aus UN M.49 für geografische Regionen;

+0

" ein dreistelliger Code "Ich sehe in diesem Regex keine Ziffern übereinstimmenden Zeichen. – Triynko

-3

^(i: AF | AX | AL | DZ | AS | AD | AO | AI | AQ | AG | AR | AM | AW | AU | AT | AZ | BS | BH | BD | BB? | MIT | 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 | EG | EG | SV | GQ | ER | EE | ET | FK | FO | FJ | FI | FR | GF | PF | TF | GA | GM | GE | DE | GH | GI | GR | GL | GD | GP | GU | GT | GG | GN | 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 | ME | 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 | TO | TT | TN | TR | TM | TC | TV | UG | UA | AE | DE | US | UM | UY | UZ | V | | VE | VN | VG | VI | WF | EH | YE | ZM | ZW) $

+0

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, um die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Außerdem ist es nicht richtig formatiert, und nicht zuletzt beantwortet es die Frage nicht, da das in der Frage beschriebene Kulturcode-Format eher wie folgt ist: [[a-z] {2,2} - [A-Z] {2,4} – Clijsters

Verwandte Themen