Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Regex - Fatal编程技术网

C# 如何编写正则表达式?

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

已编辑

如何编写正则表达式来检查字符串的长度是否为8或更多,并且它只包含数字,那么它应该至少包含一个字母字符。例如:

  • 1234567-有效
  • 1234a5678-有效
  • 12345678-无效,因为它的长度为8,并且不包含任何字母

  • 试试这个
    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至少包含一个字母字符。好的,现在我们有三种不同的问题描述,都来自您。请您下定决心好吗?