Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式允许使用拉丁字母和数字,不允许使用空格_C#_Regex - Fatal编程技术网

C# 正则表达式允许使用拉丁字母和数字,不允许使用空格

C# 正则表达式允许使用拉丁字母和数字,不允许使用空格,c#,regex,C#,Regex,我的正则表达式只允许拉丁字母和数字,不允许空格。但是这个表达式缺少存在空格的字符串。在我的代码中,我需要看到真假。但我看到了真实的。它是怎么修好的 String str1=“5asdfEDadgs2”; 字符串str2=“5 asdfgsadgs2”; 字符串注册表=@“^[a-zA-Z]|[0-9]|。*$” bool res=Regex.Match(str1,reg)。成功//必须证明是真的 boolres2=Regex.Match(str2,reg).Success//必须显示错误 控制台

我的正则表达式只允许拉丁字母和数字,不允许空格。但是这个表达式缺少存在空格的字符串。在我的代码中,我需要看到真假。但我看到了真实的。它是怎么修好的

String str1=“5asdfEDadgs2”;
字符串str2=“5 asdfgsadgs2”;
字符串注册表=@“^[a-zA-Z]|[0-9]|。*$”
bool res=Regex.Match(str1,reg)。成功//必须证明是真的
boolres2=Regex.Match(str2,reg).Success//必须显示错误
控制台写入线(res);
控制台写入线(res2);

您不需要正则表达式,只需使用一点LINQ:

String str1="5asdfEDadgs2";
String str2 = "5 asdfgsadgs2";

bool res = str1.All(char.IsLetterOrDigit); //True
bool res2 = str2.All(char.IsLetterOrDigit); //False

您也可以编写等效的str1.All(c=>char.isleterOrdigit(c)),但我发现方法组的形式更简洁。

尝试将正则表达式更改为:

^[A-Za-z0-9]+$

您当前的正则表达式中有|。*这实际上是“或任何字符(包括空格)”

Visual Studio没有获取“All”方法。@user2956406 Add
using System.Linq位于文件顶部。如果你有ReSharper,你也可以按ALT+ENTER,它会自动添加using指令。从来没有做过这个特殊的测试,但是:一般来说,正则表达式应该比Linq快很多。我认为OP是指ASCII范围内的字母和数字。
IsleterOrdigit
的(链接)文档说明,有效字母和十进制数字是Unicode分类中以下类别的成员:大写字母、小写字母、标题字母、修饰符、其他字母或小数位数。检查
DecimalDigitNumber
类别显示它包含来自各种语言/字母的十进制数字或数字。。。另请参见以下答案:在接受的答案中给出的正则表达式应该正好实现这一点。或者只需
^[A-Za-z0-9]+$
您就可以看到
true
,因为它只在
*
上匹配,这意味着:每个字符(新行字符除外)都有零到无限次。如果您坚持使用正则表达式,那么您就差不多做到了:使用
^[a-Za-z0-9]+$
。此操作仅匹配给定范围内的一个或多个字符,如果遇到任何其他字符,则将失败。