代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Waltenberg

与区域性名称匹配的正则表达式是什么?

  •  6
  • Rodrigo Waltenberg  · 技术社区  · 14 年前

    我想使用正则表达式来过滤区域性名称(如en-us或pt-br)。有人知道吗?

    3 回复  |  直到 9 年前
        1
  •  13
  •   Gumbo    14 年前

    试试这个:

    ^[a-z]{2}-[A-Z]{2}$
    

    或更一般(见 RFC 4647 ):

    ^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*$
    
        2
  •  1
  •   rdhainaut    9 年前

    如果你想跟着 RFC 4646 区域性名称的格式(who is <languagecode2>-<country/regioncode2> 在哪里 <languagecode2> 是语言代码和 <country/regioncode2> 是亚文化代码)

    例子 :“en”,“en uk”,“fr”,“fr fr”,……

    使用这个正则表达式:

    ^[a-z]{2}(-[A-Z]{2})* 
    

    C码样本

    Regex.IsMatch(culture, @"^[a-z]{2}(-[A-Z]{2})*$")
    
        3
  •  0
  •   Tauquir    14 年前

    @秋葵汤是对的。测试:

    In [1]: import re
    
    In [2]: reg = re.compile("^[a-z]{2}-[A-Z]{2}$")
    
    In [3]: url = 'en-US'
    
    In [4]: m = reg.match(url)
    

    结果表明它是匹配的。