我的C#代码上有一个正则表达式,我想通过添加约束来编辑它,如果字符串不包含至少一个字母,则拒绝文本,不管是什么语言。
我的正则表达式:@“^(?!\s+$)[\p{L}\p{M}\p{N}\p{Zs}\t'.-]+$”
有什么建议请。
任何Unicode字母都可以与\p{L}
匹配(请参阅您自己的模式)。
要匹配Unicode字母以外的任何字符,为了“找到”字符串中的字母,可以使用\p{L}*
。如果只有没有换行符的字符串,则可以简单地使用.*
或.*?
。
注意,该要求还包括至少有一个非空白字符的要求,因此(?!\s+$)
前瞻变得多余(因为它所做的只是在字符串中只有空白时取消匹配)。
要要求某些模式在字符串后面出现,可以使用lookahead:
@"^(?=\P{L}*\p{L})[\p{L}\p{M}\p{N}\p{Zs}\t'.-]+$"
// ^^^^^^^^^^^^^^^
@"^(?=.*\p{L})[\p{L}\p{M}\p{N}\p{Zs}\t'.-]+$"
// ^^^^^^^^^^^
请参阅.NET正则表达式演示。
详情:
^
-字符串的开始(?=\p{L}*\p{L})
-在除Unicode字母以外的零个或多个字符之后,必须有一个Unicode字母[\p{L}\p{M}\p{N}\p{Zs}\t'。-]+
-一个或多个字母、变音符、数字、水平空格、'
、.
或-
字符$
-字符串结尾。