Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 正则表达式仅允许.net中的某些字符_C#_.net_Regex - Fatal编程技术网

C# 正则表达式仅允许.net中的某些字符

C# 正则表达式仅允许.net中的某些字符,c#,.net,regex,C#,.net,Regex,我只是在做一些验证工作,但在这个问题上遇到了麻烦:(我想要一个只包含[a-z][a-z][0-9][uz]的文本。) 它应以任何顺序多次接受上述任何字符。所有其他字符将文本标记为无效。 我试过了,但没用 { ...... Regex strPattern = new Regex("[0-9]*[A-Z]*[a-z]*[_]*"); if (!strPattern.IsMatch(val)) { ret

我只是在做一些验证工作,但在这个问题上遇到了麻烦:(我想要一个只包含[a-z][a-z][0-9][uz]的文本。)

它应以任何顺序多次接受上述任何字符。所有其他字符将文本标记为无效。
我试过了,但没用

  {
        ......

        Regex strPattern = new Regex("[0-9]*[A-Z]*[a-z]*[_]*");

        if (!strPattern.IsMatch(val))
        {
            return false;
        }

        return true
  }
试试这个:

new Regex("[0-9A-Za-z_]*");
你想要这个:

Regex strPattern = new Regex("^[0-9A-Za-z_]*$");
您的表达式不起作用,因为:

  • 它将接受任意数量的数字,后跟任意数量的大写字母,后跟任意数量的小写字母,后跟任意数量的下划线。例如,下划线后跟数字将不匹配
  • 您的模式没有使用
    ^
    $
    字符锚定。这意味着每个字符串都将匹配,因为每个字符串都包含零个或多个指定字符(例如,字符串“!@#$”包含零个数字,等等!)将表达式锚定到字符串的开头和结尾意味着整个字符串与整个表达式非常匹配,否则匹配将失败
  • 此模式仍将接受长度为零的字符串作为有效字符串。如果要强制该字符串至少为一个字符,请将表达式末尾附近的
    *
    更改为
    +
    *
    表示“0个或多个上一个标记”,而
    +
    表示“1个或多个上一个标记”。)

这也将匹配一个空字符串,将其稍微更改为^[0-9A-Za-z_2;]+$可能会更好。@miket2e:也许吧,但OP没有表明这是事实,我无法从问题中确定这是否是表达式的预期行为。但我将编辑我的答案以引入这种可能性。@miket2e-我还需要空字符串的条件!!感谢您提及它。(不过我应该把问题框好!!)您应该注意,
^\w*$
将验证字母数字和下划线的字符串。嘿,伙计们,我想要一个模式,该模式必须是完全数字的,或者以一个字母开头,然后后跟数字。此外,字母必须是以下之一:c、f、t、p、I或n。我知道有其他方法来验证这一点,但我不知道“我认为正则表达式是一种优雅的方式:)仅供参考,此模式将匹配每个字符串。换句话说,
regex.IsMatch()
不会使用此模式返回false的字符串。