2011-07-04 855 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

相關問題