具有至少一个字母的字母数字字符串或字符串中的至少一个数字的正则表达式

时间:2011-04-21 16:33:25

标签: c# regex

要测试一个字母数字字符串,我们通常使用正则表达式"^[a-zA-Z0-9_]*$"(或最优选"^\w+$"用于C#)。但是这个正则表达式只接受数字字符串或仅字母字符串,如"12345678""asdfgth"

我需要一个正则表达式,它只接受至少一个字母和一个数字的字母数字字符串。也就是说,正则表达式"ar56ji"将是正确的字符串之一,而不是之前所说的字符串。

提前致谢。

5 个答案:

答案 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;
}