仅用于字母数字的正则表达式不起作用
Posted
技术标签:
【中文标题】仅用于字母数字的正则表达式不起作用【英文标题】:regex for alphanumeric only is not working 【发布时间】:2016-05-24 15:34:10 【问题描述】:这是我正在尝试的代码:
string MatchNumberPattern = "^[a-zA-Z0-9]*$";
if (!Regex.IsMatch(cueTextBox9.Text, MatchNumberPattern))
MessageBox.Show("Enter 8 Space Alphanumeric BT ID only");
cueTextBox9.Text = String.Empty;
else
do something();
它接受aaaaaaaa
,但我想要字母和数字的组合,例如aaaa1234
。
【问题讨论】:
当然,它采用aaaaaaaa
,您指定它采用任意次数的 a-z 或 A-Z 或 0-9 的任何内容。所以它也需要aaabbbjfgkgAJFFJL0142342
。你想干什么?如果您只想匹配数字:^[0-9]*$
或 ^[0-9]+$
如果空字符串不行。您可以使用\d
代替[0-9]
作为简写,但首先请说明您想要什么:)
我只想接受字母数字,而不是仅接受字母或仅接受数字..
字母数字的意思是“字母数字是字母和数字字符的组合......”(引用自维基),所以它表示字母和数字。这就是你已经在这里做的事情了。
老兄,我是说我想要字母和数字都在其中...都在一个字符串中,那么它将是可以接受的。否则不是
供将来参考:“我希望我的正则表达式只匹配同时包含字母和数字的输入”。并且不要“花花公子”我。
【参考方案1】:
要在输入中同时出现字母和数字,您需要正向前瞻:
@"^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]*$"
^^^^^^^^^^^^^^^^^^^^^^^^
见regex demo
(?=.*[a-zA-Z])
确保输入字符串中有一个字母,(?=.*[0-9])
确保输入字符串中有一个数字。
由于您从单行文本框中获取输入,因此在前瞻中使用.
是安全的。作为替代方案,您可以使用@"^(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])[a-zA-Z0-9]*$"
(基于对比原理)。
【讨论】:
【参考方案2】:您可以使用lookahead 来检查一个数字并在其余部分之前匹配一个字母。
^(?i)(?=\D*\d)\d*[A-Z][A-Z\d]*$
^
字符串开头
(?i)
flag 用于无大小写匹配
(?=\D*\d)
提前查看\D*
任意数量的非数字,后跟\d
数字
如果成功匹配 \d*[A-Z]
任意数量的数字后跟 alpha
[A-Z\d]*
匹配任意数量的字母数字字符,直到
$
字符串结束
See demo at regex101
【讨论】:
【参考方案3】: async Task<string> CheckPasswordAgainstPasswordSettings(string password)
Regex rxUpper= new Regex(@"[A-Z]");
Regex rxLower = new Regex(@"[a-z]");
var passwordcomplexityrulesetttings= (await _PasswordComplexityRuleService.All()).First();
if(passwordcomplexityrulesetttings==null)
return "password valid";
if(passwordcomplexityrulesetttings.MinLength> password.Length)
return "password is not of minimum length";
if (passwordcomplexityrulesetttings.MustContainLettersNumbers)
if(password.Any(a=>!char.IsDigit(a)&&!char.IsLetter(a)) && !passwordcomplexityrulesetttings.MustContainSpecialCharacters)
return "password must contain letters and numbers";
if (passwordcomplexityrulesetttings.MustContainSpecialCharacters)
if (!password.Any(a => !char.IsDigit(a) && !char.IsLetter(a)))
return "password must contain special characters";
if (passwordcomplexityrulesetttings.MustContainUpperLower)
if (!rxLower.Match(password).Success||!rxUpper.Match(password).Success)
return "password must contain upper and lower case";
return "password valid";
【讨论】:
以上是关于仅用于字母数字的正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章