0

我需要一个正则表达式来检查字符串是否包含字母和数字的组合。不允许使用特殊字符和空格。我的字符串应至少包含一个字符和一个字母

4

3 回答 3

4

描述

这将

  • 找出所有至少有一个字母和一个数字的字符串
  • 并且只包含任意顺序的字母和数字

^(?=[^\s]*?[0-9])(?=[^\s]*?[a-zA-Z])[a-zA-Z0-9]*$

在此处输入图像描述

例子

请注意,对于其中一些示例,我删除了$表达式末尾的 ,因为示例中的源字符串确实包含很多行。要正确验证字符串,您需要删除多行匹配并使用$如上所示的字符。

现场示例

示例文本

11
22
33
1
2
3
1a
2b
3c
a1
b2
c3
1a1a
2b2b
3b3b
1a1
2b2
3b3
a1a
b2b
c3c
a
b
c
aa
bb
cc

C# 代码示例

using System;
using System.Text.RegularExpressions;
namespace myapp
{
  class Class1
    {
      static void Main(string[] args)
        {
          String sourcestring = "source string to match with pattern";
          Regex re = new Regex(@"^(?=[^\s]*?[0-9])(?=[^\s]*?[a-zA-Z])[a-zA-Z0-9]*",RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline | RegexOptions.Singleline);
          MatchCollection mc = re.Matches(sourcestring);
          int mIdx=0;
          foreach (Match m in mc)
           {
            for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
              {
                Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
              }
            mIdx++;
          }
        }
    }
}

找到的匹配项

[0][0] = 1a
[1][0] = 2b
[2][0] = 3c
[3][0] = a1
[4][0] = b2
[5][0] = c3
[6][0] = 1a1a
[7][0] = 2b2b
[8][0] = 3b3b
[9][0] = 1a1
[10][0] = 2b2
[11][0] = 3b3
[12][0] = a1a
[13][0] = b2b
[14][0] = c3c

概括

这是有效的,因为表达式向前看以验证它确实可以在字符串中找到一个数字和一个字母,然后匹配所有字母和数字

于 2013-05-01T14:53:43.137 回答
3

为了兼容 unicode:

^[\pL\pN]+$

\pL代表任何字母
\pN代表任何数字

于 2013-05-01T09:41:45.623 回答
2

仅匹配单个 0-9 或 az 或 AZ。

[0-9a-zA-Z]

匹配 1 个或多个

[0-9a-zA-Z]\+

如果您对整行都是字母数字字符感兴趣。

^[0-9a-zA-Z]\+$

^ 匹配行首,$ 匹配行尾。

于 2013-05-01T08:34:40.070 回答