2012-05-22 24 views
0

我對通過正則表達式的語言特定驗證程序感興趣。我知道我可以驗證一個人的名字,以任何語言,用這樣的模式:針對特定語言的單詞或名稱的正則表達式

「[\p{L}\p{M}]」 

不過是,如果我想驗證什麼特定的語言?如果我的線索CurrentUICulture或CurrentCulture設置將簡單地將"[\w]"的含義轉換爲適合德語,西班牙語,英語,特別是中文的內容,那就太好了。它以這種方式工作嗎?如果是的話,那麼這可能是我的答案。

如果不是,那麼我的下一個興趣是使用regex script annotation。然而,我注意到:

  1. 在鏈接中給出的列表中不包括簡化的「中國人」,對此我特別感興趣
  2. 我不認爲基於腳本的.NET正則表達式功能的支持匹配。 。是?沒有?

所以我最後的選擇,如果我不能得到前兩個選項的工作,轉向named blocks。至少在.net supported named blocks列表中包含CJK的幾個條目。我想我可以簡單地把幾個中日韓方塊合併起來,然後叫(簡體)「中國人」。

想法?

+0

實際上,您鏈接的regular-expressions.info上的頁面也包含有關.NET支持的信息...... – Joey

+3

實際上,您無法通過這種方式驗證名稱。不,罷工。 [你不能驗證名字](http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/)。 –

回答

0

我的結論是,在.net設置中,不存在對CurrentUICulture敏感的正則表達式。我還得出結論認爲,最寬鬆的合理方案是對所有語言同時進行驗證 - 僅僅拒絕所有形式的不可打印字符,「dingbats」,尖括號(防止標記注入)和數學符號:

@」^[^\p{C}<>\p{Sm}\p{So}]*$」 

中期寬容的方法是使用明確捕獲西方和東方字符集(包括變音符號和「合併字符」)的字符串:

@"^[\p{L}\p{M}\p{Pd}\p{Pi}\p{Pf}\s]*$" 

最不寬容的方法,如果我只想要西方字符,是這樣的:

@"^[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{Pd}\p{Pi}\p{Pf}-[\p{N}]]*$" 

上面仍然允許所有形式的引號,通常適用於像O'Toole這樣的名字。

相關問題