如何使用正则表达式验证文化代码?

时间:2010-10-18 19:20:35

标签: regex

我真的不懂正则表达式,我也找不到任何正则表达式规则来验证文化代码:en-GB,en-UK,az-AZ-Cyrl,其他。

如何使用正则表达式验证这些代码?

5 个答案:

答案 0 :(得分:31)

您可以使用以下方式进行验证:

/^[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))?替换最后一个非捕获组

答案 1 :(得分:6)

这是我在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})*

答案 2 :(得分:4)

根据https://en.wikipedia.org/wiki/IETF_language_tag,正则表达式可以是:

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

来自wiki:

  

基于ISO 639-1(2002)的双字母语言代码或ISO 639-2(1998),ISO 639-3(2007)或ISO 639-的三字母代码的单个主要语言子标签5(2008),或通过BCP 47注册过程并由五至八个字母组成;

     

可选脚本子标签,基于ISO 15924的四字母脚本代码(通常以标题为例);

     

一个可选的区域子标签,基于ISO 3166-1 alpha-2的双字母国家代码(通常以大写字母书写),或UN M.49的三位数代码,用于地理区域;

答案 3 :(得分:0)

根据

<块引用>

RFC 3066

2.语言标签

2.1 语言标签语法

语言标签由一个或多个部分组成:一个主要语言子标签和一系列(可能为空的)后续子标签。

这个标签在 ABNF [RFC 2234] 中的语法是:

Language-Tag = Primary-subtag *( "-" Subtag )

Primary-subtag = 1*8ALPHA

Subtag = 1*8(ALPHA / DIGIT)

ALPHA 和 DIGIT 的作品是从 RFC 2234 导入的;它们分别表示大写或小写的字符AZ和从09的数字。字符“-”是连字符减号(ABNF:%x2D)。

Language-Tag

/^[a-z]{1,8}(?:\-[a-z0-9]{1,8})*$/i
(A Javascript regular expression. The “i” denotes case-insensitiveness.)

答案 4 :(得分:-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 |北京| BM | BT | BO | BQ | BA | BW | BV | BR | IO | BN | BG | BF | BI | KH | CM | CA |简历| KY | CF | TD | CL | CN | CX | CC |公司| 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 |通用| GE | DE | GH | GI | GR | GL |广东| 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 |李| LT |陆| MO | MK | MG |兆瓦| 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 |地产| RO | RU | RW | BL | SH | KN | LC | MF |发短消息| 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 |电视| UG | UA | AE | GB |美| UM | UY | UZ | VU | VE | VN | VG | VI | WF | EH | YE | ZM | ZW)$