C# 如何编写正则表达式?
已编辑 如何编写正则表达式来检查字符串的长度是否为8或更多,并且它只包含数字,那么它应该至少包含一个字母字符。例如:C# 如何编写正则表达式?,c#,.net,regex,C#,.net,Regex,已编辑 如何编写正则表达式来检查字符串的长度是否为8或更多,并且它只包含数字,那么它应该至少包含一个字母字符。例如: 1234567-有效 1234a5678-有效 12345678-无效,因为它的长度为8,并且不包含任何字母 试试这个Regex: ^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$ 您的代码可以如下所示: var str = new List<string> {"1234567", "1234a5678", "12345678"}; foreach (st
试试这个
Regex
:
^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$
您的代码可以如下所示:
var str = new List<string> {"1234567", "1234a5678", "12345678"};
foreach (string s in str)
{
var isValid = Regex.IsMatch(s, @"^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$");
}
var str=新列表{“1234567”、“1234a5678”、“12345678”};
foreach(str中的字符串s)
{
var isValid=Regex.IsMatch(s,@“^(\d{0,7}|)(\d*[a-zA-Z]\d*)+)$”;
}
试试这个Regex
:
^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$
您的代码可以如下所示:
var str = new List<string> {"1234567", "1234a5678", "12345678"};
foreach (string s in str)
{
var isValid = Regex.IsMatch(s, @"^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$");
}
var str=新列表{“1234567”、“1234a5678”、“12345678”};
foreach(str中的字符串s)
{
var isValid=Regex.IsMatch(s,@“^(\d{0,7}|)(\d*[a-zA-Z]\d*)+)$”;
}
整数位数(字符串输入){
{
整数计数=0;
foreach(str中的字符c)
{
如果(c>'0'和&c<'9')
计数++;
}
返回计数;
}
bool是有效的(字符串输入)
{
if(数字(输入)int数字(字符串输入){
{
整数计数=0;
foreach(str中的字符c)
{
如果(c>'0'和&c<'9')
计数++;
}
返回计数;
}
bool是有效的(字符串输入)
{
if(Digits(input)如果你想创建和测试你的正则表达式,请毫不犹豫地使用此如果你想创建和测试你的正则表达式,请毫不犹豫地使用此,因为问题改变了我的初始正则表达式解决方案,不再有效。事实上,现在很难使用单个正则表达式。因此,另一个选项是:
bool Validate(string s) {
int numDigits = s.Count(c => char.IsNumber(c));
if (numDigits <= 7) {
return numDigits == s.Length;
} else {
int numLetters = s.Count(c => char.IsLetter(c));
return numLetters > 0 && numDigits + numLetters == s.Length;
}
}
bool验证(字符串s){
int numDigits=s.Count(c=>char.IsNumber(c));
if(numDigits char.isleter(c));
返回numLetters>0&&numDigits+numLetters==s.Length;
}
}
因为问题改变了,我的初始正则表达式解决方案不再有效。事实上,现在很难使用单个正则表达式。因此,另一个选择:
bool Validate(string s) {
int numDigits = s.Count(c => char.IsNumber(c));
if (numDigits <= 7) {
return numDigits == s.Length;
} else {
int numLetters = s.Count(c => char.IsLetter(c));
return numLetters > 0 && numDigits + numLetters == s.Length;
}
}
bool验证(字符串s){
int numDigits=s.Count(c=>char.IsNumber(c));
if(numDigits char.isleter(c));
返回numLetters>0&&numDigits+numLetters==s.Length;
}
}
如果您使用c#,您可以简化您的生活并使用两个单独的正则表达式:
bool res = false;
string str = // your string
if (str < 8)
{
res = Regex.IsMatch(str, @"^[0-9]+$");
}
else
{
res = Regex.IsMatch(str, @"^(?=[a-zA-Z0-9]*[a-zA-Z])[a-zA-Z0-9]*$");
}
bool res=false;
string str=//您的字符串
如果(str<8)
{
res=Regex.IsMatch(str,@“^[0-9]+$”;
}
其他的
{
res=Regex.IsMatch(str,“^(?=[a-zA-Z0-9]*[a-zA-Z])[a-zA-Z0-9]*$”;
}
如果您使用c#,您可以简化您的生活并使用两个单独的正则表达式:
bool res = false;
string str = // your string
if (str < 8)
{
res = Regex.IsMatch(str, @"^[0-9]+$");
}
else
{
res = Regex.IsMatch(str, @"^(?=[a-zA-Z0-9]*[a-zA-Z])[a-zA-Z0-9]*$");
}
bool res=false;
string str=//您的字符串
如果(str<8)
{
res=Regex.IsMatch(str,@“^[0-9]+$”;
}
其他的
{
res=Regex.IsMatch(str,“^(?=[a-zA-Z0-9]*[a-zA-Z])[a-zA-Z0-9]*$”;
}
您的第三个示例包含的数字不超过8位
。因此,根据您的问题,它应该是有效的。我想他的意思是,如果少于8位,它应该只包含数字,大于或等于8,它应该至少有一个字母字符。@FrédéricHamidi,我更新我的帖子。如果超过7位,您的third示例不包含超过8位的。因此,根据您的问题,它应该是有效的。我认为他的意思是,如果它少于8位,它应该只包含数字,大于或等于8,它应该至少有一个字母字符。@FrédéricHamidi,我更新我的帖子。如果它超过7位digits@Joey谢谢poi找出我的错误。我添加了匹配器的开头和结尾。@乔伊,谢谢你指出我的错误。我添加了匹配器的开头和结尾。例如,这将捕获123x
。少于7个数字和一个字母,这不是他们想要的。@Joey,这正是我需要的。如果最多有8个(不包括)只有数字就可以了。否则它必须至少包含一个字母。是的,但正则表达式将匹配少于7位的字符串和一个字母。也就是说,它不能满足您的要求。除非我误解了您的要求。@Joey,如果我误导了您,很抱歉。我想要的是,如果字符串的长度为8或更多,并且它只包含数字,那么它必须符合您的要求。@Joeyn至少包含一个字母字符。好的,现在我们有三种不同的问题描述,都来自您。请您下定决心好吗?这将捕获123x
例如。少于7位和一个字母,这不是他们想要的。@Joey,这正是我需要的。如果最多有8位(不包括)只有数字就可以了。否则它必须至少包含一个字母。是的,但正则表达式将匹配少于7位的字符串和一个字母。也就是说,它不能满足您的要求。除非我误解了您的要求。@Joey,如果我误导了您,很抱歉。我想要的是,如果字符串的长度为8或更多,并且它只包含数字,那么它必须符合您的要求。@Joeyn至少包含一个字母字符。好的,现在我们有三种不同的问题描述,都来自您。请您下定决心好吗?