我有一个匹配ASCII字母数字字符的正则函数:
string pattern = "^[a-zA-Z0-9]+$";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
...
我想扩展它以应用相同的概念,但包括所有拉丁字符(例如å,Ø等)。
我读过unicode scripts。我试过这个:
string pattern = "^[{Latin}0-9]+$";
但它与我期望的模式不匹配。如何使用unicode脚本或替代方法匹配拉丁unicode? p>
答案 0 :(得分:3)
.NET正则表达式引擎不支持Unicode脚本,但Unicode块是。话虽如此,您可以使用以下正则表达式匹配所有拉丁字符:
^[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}\p{IsLatinExtended-B}0-9]+$
\p{IsBasicLatin}
:U + 0000-U + 007F \p{IsLatin-1Supplement}
:U + 0080-U + 00FF \p{IsLatinExtended-A}
:U + 0100-U + 017F \p{IsLatinExtended-B}
:U + 0180-U + 024F 或只使用^[\u0000-\u024F0-9]+$
。
由@AnthonyFaull提及您可能需要考虑匹配\p{IsLatinExtendedAdditional}
,这是包含256个附加字符的U + 1E00-U + 1EFF的命名块:
[ắẮằẰẵẴẳẲấẤầẦẫẪẩẨảẢạ ẠặẶậẬḁḀ ẚ ḃḂḅḄḇḆ ḉḈ ḋḊḑḐḍḌḓḒḏḎ ẟ ếẾềỀễỄểỂẽẼḝḜḗḖḕḔẻẺẹẸ ệỆḙḘḛḚ ḟḞ ḡḠ ḧḦḣḢḩḨḥḤḫḪẖ ḯḮỉỈịỊḭḬ ḱḰḳḲḵḴ ḷḶḹḸḽḼḻḺ ỻỺ ḿḾṁṀṃṂ ṅṄṇṆṋṊṉṈ ốỐồỒỗỖổỔṍṌṏṎṓṒṑṐỏỎớỚ ờỜỡỠởỞợỢọỌộỘ ṕṔṗṖ ṙṘṛṚṝṜṟṞ ṥṤṧṦṡṠṣṢṩṨẛ ẞ ẜ ẝ ẗṫṪṭṬṱṰṯṮ ṹṸṻṺủỦứỨừỪữỮửỬựỰụỤṳṲ ṷṶṵṴ ṽṼṿṾ ỽỼ ẃẂẁẀẘẅẄẇẆẉẈ ẍẌẋẊ ỳỲẙỹỸẏẎỷỶỵỴ ỿỾ ẑẐẓẒẕẔ]
答案 1 :(得分:1)
使用^[\p{L}\s]+$
匹配任何unicode字符
或^[\w\u00c0-\u017e]$
匹配任何字母加上从00c0到017e的unicode字符(使用charmap查找所需的unicode字符范围)
答案 2 :(得分:1)
我将使用unicode脚本。
如维基百科(https://en.wikipedia.org/wiki/Latin_script_in_Unicode)所述,我将使用Latin-1 Supplement(00C0-00FF),Latin Extended-A(0100-017F),Latin Extended-B(0180-024F)和您的模式用于ASCII字母数字字符。
string pattern = "^[a-zA-Z0-9\\u00C0–\\u024F]+$";