Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,我写这段代码是为了验证用户名是否满足给定的条件,有人看到我如何将两个regex合并成一个吗?代码是c# // ///确定用户名是否满足条件。 ///用户名条件: ///长度必须为1到24个字符 ///必须以字母a-zA-Z开头 ///可以包含字母、数字或“.”、“-”或“” ///不得以“.”、“-”或“-”结尾 /// ///提议的用户名 ///如果用户名有效,则为True 私有静态正则表达式sUserNameAllowedRegEx=新正则表达式(@“^[a-zA-Z]{1}[a-zA-Z

我写这段代码是为了验证用户名是否满足给定的条件,有人看到我如何将两个regex合并成一个吗?代码是c#

//
///确定用户名是否满足条件。
///用户名条件:
///长度必须为1到24个字符
///必须以字母a-zA-Z开头
///可以包含字母、数字或“.”、“-”或“”
///不得以“.”、“-”或“-”结尾
/// 
///提议的用户名
///如果用户名有效,则为True
私有静态正则表达式sUserNameAllowedRegEx=新正则表达式(@“^[a-zA-Z]{1}[a-zA-Z0-9\.\-]{0,23}[^.-]$”,RegexOptions.Compiled);
私有静态正则表达式sUserNameIllegalEndingRegEx=新正则表达式(@“(\.\.\-\.\.\.\.\-\.\.\-\.$”,RegexOptions.Compiled);
公共静态bool isUserName允许(字符串用户名)
{
if(string.IsNullOrEmpty(用户名)
||!sUserNameAllowedRegEx.IsMatch(用户名)
||sUserNameIllegalEndingRegEx.IsMatch(用户名)
||亵渎过滤器。异黄酮(用户名))
{
返回false;
}
返回true;
}

尝试在最后一个字符类上添加贪婪的
+
,并使中产阶级不贪婪:

@"^[a-zA-Z][a-zA-Z0-9\._\-]{0,22}?[a-zA-Z0-9]{0,2}$"
这将不允许任何以
-
的任何组合结尾的内容。这并不完全是你原来的正则表达式,但我想这可能是你想要的

^[a-zA-Z][a-zA-Z0-9._-]{0,21}([-.][^_]|[^-.]{2})$

这真的很接近了(它满足了您的所有要求,但它至少需要三个字符,而不是一个字符)。要深入到一个问题,我需要对C#的正则表达式功能进行一些研究,我现在没有时间,但我希望这能让您朝着正确的方向前进。

如果我正确理解您的需求,下面应该是您想要的。
\w
与字母、数字或
\u
匹配

除非前面的字符是
-
,否则(
(?部分)允许使用

@"^(?=[a-zA-Z])[-\w.]{0,23}([a-zA-Z\d]|(?<![-.])_)$"

@^(?=[a-zA-Z])[-\w.]{0,23}([a-zA-Z\d]|)(?朋友,字符串末尾只有四个表达式需要验证,对吗?所以使用第一个正则表达式验证用户名,然后使用字符串函数检查这四个结尾。它不会比一个异常的正则表达式花费更多的处理时间


尝试string.EndsWith()方法来验证“.”、“-”、“.”或“-”

这将传递大于24个字符的用户名。它还允许以所有不允许的字符/组合结尾的字符串(我测试过以确保)。编辑:以及您的上一个字符类是否可执行(它不是),它将不允许每个规范允许的字符。您不需要在字符类中转义
-
。您需要将
-
放在
之后[
但是。此外,规范允许在字符串末尾添加
。为什么要将两个半易读的正则表达式转换为一个不太易读的正则表达式?您的代码当前是否工作不正常?仅使用一个正则表达式的动机是什么?对,我当前的正则表达式允许将无效字符作为最后一个字符,例如:aab$,或aab#被我的正则表达式接受,因为最后一个子句使用的字符不是$。所以我需要修正thx,以便发表评论。我只是想让一个人看看怎么做。@Nathan Wilfert:我应该强调的是,这里的重要部分是消极的回顾。这就是我认为你要抓住的。这个答案似乎是结束语,但它不允许像“a”这样的一个字符字符串。@Nathan:这是一个有趣的观点。有时很难用正则表达式解释所有的可能性。尝试一个修改:
@^(?=[a-zA-Z])[-\w.]{0,23}([a-zA-Z\d]|)(?这行不通;结尾太宽了。它将匹配“foo.”和“foo x”。例如,这就是我最后要做的,我只是想知道如何用一个正则表达式实现这一点是一个有趣的问题。
@"^(?=[a-zA-Z])[-\w.]{0,23}([a-zA-Z\d]|(?<![-.])_)$"