2011-07-04 849 views
0

我试图创建一个表达式来检查响应是否至少有三个字母。数字,空格和其他所有字符都是有效的。下面的内容只适用于特殊角色不首先出现的情况。正则表达式必须至少有3个字母字符

(?=(.*[a-zA-Z]){3,})^[a-zA-Z0-9].+$ 
+0

这是因为^表示“始于”。你有一个你正在测试的例子吗? – Drazisil

+0

哪种语言? –

+0

这将是一个有效的回应。 “*我们三个。” – JMILLS

回答

6

您可以使用一个更简单的正则表达式:([a-zA-Z].*?){3}

这一个字母,后面可以跟其他字符匹配,重复三次。

+0

我试过了,如果响应以特殊字符开始,它不起作用。 – JMILLS

+0

它应该工作,除非您使用'^'来要求字符串匹配从字符串的开头。 –

+0

@约翰:是的,它的确如此。我只是试了一下。 – SLaks

1
(?:[a-zA-Z][^a-zA-Z]*){3} 

匹配(一个字母,接着由任何非leters)的3倍。 (?:)使它更有效率,因为正则表达式引擎不必捕获。

当然,没有正则表达式可能会更容易阅读和理解。这里是C#/ linq示例。

if (s.Count(char.IsLetter) >= 3) 
{ 
    // is valid. 
} 
0

我的解决方法:(.*[a-zA-Z].*){3}

这是非常相似@SLacks,所不同的是,如果你有封闭在特殊字符,例如<script>字母字符我的代码工作。

@ridgerunner有一个整洁的解决方案,但如果字符串的末尾是一个特殊的字符,它不会匹配。你可以看到这个图像中的例子:

@ridgerunner Regex tested

相关问题