我需要一个正则表达式来检查字符串是否包含字母和数字的组合。不允许使用特殊字符和空格。我的字符串应包含至少一个字符和一个字母
答案 0 :(得分: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
这是有效的,因为表达式向前看以验证它确实可以在字符串中找到一个数字和一个字母,然后匹配所有字母和数字
答案 1 :(得分:3)
为了兼容unicode:
^[\pL\pN]+$
\pL
代表任何字母
\pN
代表任何数字
答案 2 :(得分:2)
仅匹配单个0-9或a-z或A-Z。
[0-9a-zA-Z]
匹配1个或更多
[0-9a-zA-Z]\+
如果您对整行是字母数字字符感兴趣。
^[0-9a-zA-Z]\+$
^匹配行的开头,$匹配行的结尾。