要测试一个字母数字字符串,我们通常使用正则表达式"^[a-zA-Z0-9_]*$"
(或最优选"^\w+$"
用于C#)。但是这个正则表达式只接受数字字符串或仅字母字符串,如"12345678"
或"asdfgth"
。
我需要一个正则表达式,它只接受至少一个字母和一个数字的字母数字字符串。也就是说,正则表达式"ar56ji"
将是正确的字符串之一,而不是之前所说的字符串。
提前致谢。
答案 0 :(得分:9)
这应该这样做:
if (Regex.IsMatch(subjectString, @"
# Match string having one letter and one digit (min).
\A # Anchor to start of string.
(?=[^0-9]*[0-9]) # at least one number and
(?=[^A-Za-z]*[A-Za-z]) # at least one letter.
\w+ # Match string of alphanums.
\Z # Anchor to end of string.
",
RegexOptions.IgnorePatternWhitespace)) {
// Successful match
} else {
// Match attempt failed
}
编辑2012-08-28 通过将懒角星更改为特定的贪婪char类来提高前瞻效率。
答案 1 :(得分:1)
试试这个:
"^\w*(?=\w*\d)(?=\w*[a-zA-z])\w*$"
这里有一篇很好的文章: http://nilangshah.wordpress.com/2007/06/26/password-validation-via-regular-expression/
答案 2 :(得分:0)
这应该有效:
"^[a-zA-Z0-9_]*([a-zA-Z][0-9]|[0-9][a-zA-Z])[a-zA-Z0-9_]*$"
这将匹配:
<zero-or-more-stuff>
EITHER <letter-followed-by-digit> OR <digit-followed-by-letter>
<zero-or-more-stuff>
通过确保您有数字后跟字母或字母后跟数字,您要强制要求至少有一位数字和至少一个字母。请注意,我遗漏了上面的_
,因为不清楚你是否会接受它作为字母,数字或两者都没有。
答案 3 :(得分:0)
试试这个^([a-zA-z]+[0-9][a-zA-Z0-9]*)|([0-9]+[a-zA-z][a-zA-Z0-9]*)$
答案 4 :(得分:0)
简单就是更好。如果你最初写它很难,那么你(或其他一些可怜的傻瓜)将很难维护或修改它。 (我认为我在上面列出的方法中看到了一些可能的漏洞。)
using System.Text.RegularExpressions;
boolean IsGoodPassword(string pwd){
int minPwdLen = 8;
int maxPwdLen = 12;
boolean allowableChars = false;
boolean oneLetterOneNumber = false;
boolean goodLength = false;
string allowedCharsPattern = "^[a-z0-9]*$";
//Does it pass the test for containing only allowed chars?
allowableChars = Regex.IsMatch(pwd, allowedCharsPattern , RegexOptions.IgnoreCase));
//Does it contain at least one # and one letter?
oneLetterOneNumber = Regex.IsMatch(pwd, "[0-9]")) && Regex.IsMatch(pwd, "[a-z]", RegularExpressions.IgnoreCase));
//Does it pass length requirements?
goodLength = pwd.Length >= minPwdLength && pwd.Length <= maxPwdLength;
return allowableChars && oneLetterOneNumber && goodLength;
}