C# RegEx检查验证字符串是否有0个或多个数值&;其他项目
我是正则表达式的初学者,所以我一直在研究一些应该相当简单的东西——或者可能不是,我只是不知道。我也为我将一步一步地讲述我的思考过程而道歉,我不确定它是否真的有用 无论如何,我想验证用户输入的值是否符合我制定的某些标准。这些是:C# RegEx检查验证字符串是否有0个或多个数值&;其他项目,c#,regex,C#,Regex,我是正则表达式的初学者,所以我一直在研究一些应该相当简单的东西——或者可能不是,我只是不知道。我也为我将一步一步地讲述我的思考过程而道歉,我不确定它是否真的有用 无论如何,我想验证用户输入的值是否符合我制定的某些标准。这些是: 最大长度为10 最小长度为4 至少4个字母 可变最小数(当前为0) 所以理论上aa1aa2的值会通过 最初我从以下内容开始,它验证了4个小写或4个大写 [a-z]{4}|[A-Z]{4}$ 但这不允许使用或,这导致我更新了它 ([a-z]|[A-Z]){4}$ 为了验
最大长度为10
最小长度为4
至少4个字母
可变最小数(当前为0) 所以理论上aa1aa2的值会通过 最初我从以下内容开始,它验证了4个小写或4个大写
[a-z]{4}|[A-Z]{4}$
但这不允许使用或,这导致我更新了它
([a-z]|[A-Z]){4}$
为了验证它是否包含必要的最小数量,我将其更改为:
(([a-z]|[A-Z]){4})([0-9]{0})$
在某些情况下,我可以通过尝试不同的方法来让人们感到厌烦,但基本上我开始注意到它只验证了有4个字母和一个数字的情况,我最终(在同事的帮助下)得出了以下结论:
^(?!^[0-9]*$)(?!^[a-zA-Z]{4}$)^([a-zA-Z0-9]{4,10}$)
这几乎是我想要的。它将验证字符串的长度,以及是否有大写/小写,但仅在我包含数字时才起作用。我试图在下半场(在{4,10}之前)去掉0-0并添加{0}的任何尝试都没有成功。基本上没有一个数字,这是行不通的
如何修改最后的代码段,以便在可能有0个数字的情况下设置子句 在C#regex引擎中(如在PCRE中),可以使用\p{L}
匹配任何小写/大写Unicode字母。在look aheads的帮助下设置限制。锚(^
和$
)用于检查整个字符串/行
这里有一个正则表达式可以检查您的条件。现在,只需输入1位数字:
^(?=.*\p{L}.*\p{L}.*\p{L}.*\p{L}.*$)(?=.*\d.*$).{4,10}$
说明:
-字符串/行开始^
-向前看,至少需要4个可能不连续的Unicode字母(?=.*\p{L}.*\p{L}.*\p{L}.*.*\p{L}.*$)
-向前看至少需要1位数字(?=.*\d.*$)
-任何字符,出现4到10次{4,10}
-字符串/行结束$
请参见。正如Dan所建议的,我也非常喜欢更具可读性的方法:
static void Main(string[] args)
{
var input = "testtest";
var numDigits = 2;
bool valid = input.Length > 3
&& input.Length < 11
&& input.Where(char.IsLetter).Count() > 3
&& input.Where(char.IsDigit).Count() > numDigits;
}
static void Main(字符串[]args)
{
var input=“testtest”;
var numDigits=2;
bool valid=input.Length>3
&&输入。长度<11
&&input.Where(char.isleter).Count()>3
&&input.Where(char.IsDigit).Count()>numDigits;
}
使用这种方法,您可以对验证进行分段,并向用户提供更有用的响应:
输入必须至少是4个字母
等不是答案,而是建议:即使您创建了一个可以验证这四个条件的正则表达式,但我不确定您是否可以,任何阅读你的代码的人都不可能理解它的意图。我建议将验证分为几个步骤,并使用单独的、更简单的表达式来验证每个步骤。是一个学习正则表达式并测试它的非常酷的网站