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