Как я могу проверить код культуры с регулярным выражением?

Я действительно не понимаю регулярное выражение, и я также не могу найти правило регулярного выражения для проверки кодов культуры как: en-GB, en-UK, az-AZ-Cyrl, others.

Как я могу проверить эти коды с регулярным выражением?

Ответы

Ответ 1

Вы можете проверить с помощью этого:

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

Вот как это работает

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

Вы также можете заменить последнюю группу без захвата на (?:-(?:Cyrl|Latn))?, если единственными параметрами являются Cyrl и Latn

Ответ 2

Это то, что я нашел в Dublin Core/W3C xsd: 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>

Тогда шаблон выглядит следующим образом:

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

Ответ 3

В соответствии с https://en.wikipedia.org/wiki/IETF_language_tag regexp может быть:

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

Из wiki:

один основной языковой subtag, основанный на двухбуквенном коде языка из ISO 639-1 (2002) или трехбуквенный код из ISO 639-2 (1998), ISO 639-3 (2007) или ISO 639- 5 (2008), или зарегистрирован в процессе BCP 47 и состоит из пяти-восьми букв;

дополнительный script subtag, основанный на четырехбуквенном коде script от ISO 15924 (обычно написанный в заголовке);

необязательный региональный субтитр на основе двухбуквенного кода страны из ISO 3166-1 альфа-2 (обычно написанный в верхнем регистре) или трехзначный код из М .49 ООН для географических регионов;

Ответ 4

^ (я: AF | AX | AL | ДЗ | 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 | КН | 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 | 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 | В | ID | IR | IQ | IE | IM | IL | IT | JM | JP | JE | JO | KZ | KE | KI | КП | KR | KW | KG | LA | LV | LB | LS | LR | LY | LI | LT | LU | МО | MK | MG | MW | МОЕ | MV | ML | MT | MH | MQ | MR | MU | УТ | MX | FM | MD | MC | MN | ME | MS | MA | MZ | MM | NA | NR | NP | NL | NC | NZ | NI | NE | NG | NU | NF | MP | NO | ОМ | PK | PW | PS | PA | PG | PY | PE | PH | PN | PL | PT | PR | QA | RE | RO | RU | RW | BL | SH | КН | LC | MF | PM | VC | WS | SM | ST | SA | SN | РС | SC | SL | SG | SX | СК | СИ | СО | ТАК | З.А. | ОО | СС | ES | ЛК | SD | SR | SJ | С.З. | ГП | СН | С.Ю. | TW | TJ | TZ | TH | TL | TG | TK | К | TT | TN | TR | TM | TC | TV | UG | UA | AE | GB | США | UM | UY | UZ | VU | VE | VN | VG | VI | WF | EH | YE | ZM | ZW) $