C# 用于字母和空格的.NET正则表达式
我试图用C#创建一个只允许字母数字字符和空格的正则表达式。目前,我正在尝试以下方法:C# 用于字母和空格的.NET正则表达式,c#,.net,regex,C#,.net,Regex,我试图用C#创建一个只允许字母数字字符和空格的正则表达式。目前,我正在尝试以下方法: string pattern = @"^\w+$"; Regex regex = new Regex(pattern); if (regex.IsMatch(value) == false) { // Display error } 我做错了什么?如果您只需要英语,请尝试以下正则表达式: “^[0-9A-Za-z]+$” 括号指定了一组字符 0-9:所有数字 A-Z:所有大写字母 a-z:所有小写字母 ”
string pattern = @"^\w+$";
Regex regex = new Regex(pattern);
if (regex.IsMatch(value) == false)
{
// Display error
}
我做错了什么?如果您只需要英语,请尝试以下正则表达式:
“^[0-9A-Za-z]+$”
括号指定了一组字符
0-9
:所有数字
A-Z
:所有大写字母
a-z
:所有小写字母
”
:空格
如果需要unicode/国际化,可以尝试以下正则表达式:
“^[\\w]+$”
这个正则表达式将匹配所有unicode字母、数字和空格,这可能超出您的需要,因此,如果您只需要英语或基本罗马字符,那么第一个正则表达式将更简单,执行速度更快
请注意,对于这两个正则表达式,我都包含了
^
和$
操作符,这意味着在开始和结束时匹配。如果需要将其从字符串中提取出来,而不必是整个字符串,则可以删除这两个运算符。字符类\w
与空格不匹配。尝试将其替换为[\w]
(在\w
后面有一个空格来匹配单词字符和空格。如果您想匹配任何空格,也可以用\s
替换空格。如果除了0-9、a-z和a-z之外,您还需要覆盖任何重音字母,如ï、é、æ、Ć或Ş,那么您最好使用Unicode属性\p{…}
用于匹配,即(注意空格):
请对所有带空格的字母尝试此选项:
@"[\p{L} ]+$"
这个正则表达式对我很有用
Regex rgx = new Regex("[^a-zA-Z0-9_ ]+");
if (rgx.IsMatch(yourstring))
{
var err = "Special charactes are not allowed in Tags";
}
实际上,除非您指定
ECMAScript
,\w
使用那些Unicode属性和更多:也许我误解了,但是ECMAScript修饰符并不影响Unicode属性的行为。它确实影响\w
行为。您是对的:\w
匹配的不仅仅是字母,它也匹配像逗号、冒号、重音这样的标点符号。`\p{isleter}更精确,只匹配字母:是的,我想我们说的是同一件事;-)这一切都取决于OP需要什么。我只是简单地指出,\w
匹配的比[0-9a-zA-Z]
更多。它还包括重音字母(除非指定了ECMAScript
)。根据Michael在我的答案下的评论,我认为这更适合这里:注意\w
匹配的不仅仅是字母。它还匹配标点符号(破折号、点、逗号等);@Abel:What\w
匹配的(除了字母和十进制数字)是连接器标点符号。完整的列表是,但您在实践中可能看到的唯一标点符号是。
,即ASCII低位或下划线字符(U+005F
).\w
也匹配数字。@user:FYI,C#与JavaScript不同,它不支持正则表达式。您实际上是在询问.NET正则表达式。那不是字母,那是ASCII字母。除美国以外的所有地方都要断开。问题发音“.NET RegEx表示字母和空格”,与数字无关,所以这个答案是正确的。这似乎是迄今为止最好的答案(也是少数几个正确的答案之一。其他答案有时与标点或数字匹配)。我只是用一个在线正则表达式测试仪对此进行了测试。添加了\p{L}
Regex rgx = new Regex("[^a-zA-Z0-9_ ]+");
if (rgx.IsMatch(yourstring))
{
var err = "Special charactes are not allowed in Tags";
}