我目前工作的一個「正確」的URI驗證,目前這一切都歸結到主機名驗證;其餘的並不那麼棘手。IDN主機標籤中允許使用哪些Unicode字符?
我卡在IDN主機名標籤上(即包含Unicode;可能的punycode編碼的字符串在這一點上已被解碼)。
我的第一個想法基本上是一個TLD的正則表達式,它不支持IDN,一個用於那些。這可能基於Mozilla’s list of IDN-enabled TLDs。分別 ^[a-zA-Z0-9\-]+$
和^[a-zA-Z0-9\-\p{L}]+$
。但是,這不是一個理想的情況,因爲每個國際化域名註冊管理機構都可以決定允許哪些字符。
我在尋找的是一個適當的,一致的,各種TLD允許的Unicode字符的最新數據表。現在看起來我必須自己在俄羅斯和中國的註冊網站上找到所有的數據(這非常困難)。
因此,在我試圖自己收集所有這些數據之前,我想知道這樣的列表是否已經存在。還是有更好的方法,最佳/常用的做法等? (我希望驗證儘可能嚴格。)
真..我想到了這一點。然而,它關於用戶輸入..我不能告訴我的用戶填寫uri的第一個轉換爲punycode。 所以這給我留下了(你可能是指)在內部將其轉換爲Punycode ......這仍然不意味着主機必須是真正有效的(如果我錯了糾正我),所以在這種情況下,匹配任何Unicode字符(\ p {L})並認爲它是有效的基本上是相同的事情。如果我無法找到一個好的解決方案,最後的選擇將是我的備用方法;如果這會是這種情況,你會建議舉行對列表的Mozilla提供(例如2點的正則表達式)? – 2010-05-17 19:45:21
以上清除; 頂級域名在mozzilla上列出 - > [a-zA-Z0-9 \ - \ p {L}] /所有其他頂級域名 - > [a-ZA-Z0-9 \ - ] 這是正確的驗證嗎? – 2010-05-17 19:48:25