编写正确的正则表达式以允许数字和仅混合字母和数字的组合

时间:2017-11-01 20:41:14

标签: c# asp.net regex asp.net-mvc boolean

我有一个字符串示例,如下所示:

51925120851209567

字符串和数字的长度可能会有所不同,但我只想让字符串只包含任一数字,或者它是字母和数字的组合。例如,有效的将是这样的:

B0031Y4M8S // contains combination of letters and numbers without white space

无效的正则表达式将是:

Does not apply // this one contains white spaces and has only letters

总结一下,正则表达式应该只允许这些组合:

51925120851209567 // contains only numbers and is valid

B0031Y4M8S // contains combination of numbers and letters and is valid as well

其他一切都无效......

我目前的解决方案只涵盖字符串为一组整数而不是其他...但是我不确定如何过滤掉没有空格和特殊字符的数字和字母的组合对正则表达式有效吗?

Regex regex = new Regex("^[0-9]+$");

    if (regex.IsMatch(parameter))
    { 
     // allow if statement to pass if the regex matches
    } 

有人能帮助我吗?

2 个答案:

答案 0 :(得分:3)

您可以使用

^(?![A-Za-z]+$)[0-9A-Za-z]+$

它匹配1个以上的字母数字字符,但如果所有字符串只包含字母,则匹配将失败。

<强>详情

  • ^ - 字符串的开头
  • (?![A-Za-z]+$) - 如果有1个以上的ASCII字母,后面紧跟着当前位置右侧的字符串结尾,则表示匹配失败的否定前瞻
  • [0-9A-Za-z]+ - 1+ ASCII字母
  • $ - 字符串结束。

请参阅regex demo

答案 1 :(得分:0)

@第四只鸟的答案几乎可以让你到达那里。我不是正则表达式专家,但是一个简单的方法可以让你得到你想要的东西:

Regex regex = new Regex("^[a-zA-Z0-9]+$");

这将为您提供第一级排除。如果它通过了,请检查:

Regex regex = new Regex("^[a-zA-Z]+$");

如果匹配,那么您知道它只是字母字符,您可以跳过它。我确信这是一个更好的方法来编写高尔夫球,但如果你处于紧张状态,这应该适用于现在。