2010-10-18 37 views
15

Tôi thực sự không hiểu regex và tôi cũng không thể tìm thấy bất kỳ quy tắc regex nào để xác thực mã văn hóa như: en-GB, en-UK, az-AZ-Cyrl, những người khác.Làm cách nào để xác thực mã văn hóa có cụm từ thông dụng?

Tôi làm cách nào để xác thực các mã này bằng cụm từ thông dụng?

+1

Liên kết đó phải được xóa vì nó dẫn đến trang web bị tấn công. –

Trả lời

28

Bạn có thể xác nhận với điều này:

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

Sau đây là cách nó hoạt động

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

Bạn cũng có thể thay thế các nhóm cuối cùng không chụp bởi (?:-(?:Cyrl|Latn))? nếu các tùy chọn chỉ là Cyrl và Latn

+0

Cảm ơn Colin Hebert và Eumiro :) – SameName69

+0

Tại sao regex đó lại ưu tiên hơn so với quy định của thông số? –

+0

@Stephane Tôi không biết có một biểu hiện chính quy trong thông số kỹ thuật. Bạn đã tìm nó ở đâu? –

6

Đây là những gì tôi tìm thấy trong Dublin Core/W3C xsd's: 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> 

Sau đó, mô hình là:

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

Nếu bạn thêm neo dòng và nhóm không chụp, nó sẽ trở thành '^ [a-zA-Z] {1,8} (?: - [a-zA-Z0-9] {1,8}) * $ ' –

4

Theo https://en.wikipedia.org/wiki/IETF_language_tag các regexp có thể là:

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

Từ wiki:

thẻ phụ ngôn ngữ chính duy nhất dựa trên hai mã ngôn ngữ thư từ ISO 639-1 (2002) hoặc mã ba chữ cái từ ISO 639-2 (1998), ISO 639-3 (2007) hoặc ISO 6 39-5 (2008), hoặc được đăng ký thông qua quy trình BCP 47 và gồm năm đến tám chữ cái;

thẻ phụ của tập lệnh tùy chọn, dựa trên mã tập lệnh gồm bốn chữ cái từ ISO 15924 (thường được viết trong trường hợp tiêu đề);

thẻ phụ khu vực tùy chọn dựa trên mã quốc gia gồm hai chữ cái từ ISO 3166-1 alpha-2 (thường được viết bằng chữ hoa) hoặc mã gồm ba chữ số từ UN M.49 cho khu vực địa lý;

+0

" mã gồm ba chữ số "Tôi không thấy bất kỳ ký tự khớp chữ số nào trong 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 | Đ | EC | 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 | 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 | KHÔNG | OM | PK | PW | PS | PA | PG | PY | PE | PH | PN | PL | PT | PR | QA | RE | RO | RU | RW | BL | SH | KN | LC | MF | CH | 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 | GB | US | UM | UY | UZ | VU | VE | VN | VG | VI | WF | EH | YE | ZM | ZW) $

+0

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Ngoài ra, nó không được định dạng đúng, và cuối cùng nhưng không kém phần này không trả lời câu hỏi, vì định dạng mã văn hóa được mô tả trong câu hỏi giống như '[a-z] {2,2} - [A-Z] {2,4}' – Clijsters

Các vấn đề liên quan