2010-09-30 33 views
23

是否可以寫一點不只有包含數字的所有字符串相匹配的正則表達式?如果我們有這些字符串:正則表達式:如何匹配一個字符串,它不僅是數字

  • ABC
  • A4C
  • 4BC
  • AB4

應該匹配ŧ他四個第一,但不是最後一個。我曾嘗試擺弄周圍在使用RegexBuddy與向前看符號之類的東西,但我似乎無法弄清楚。

回答

31
(?!^\d+$)^.+$ 

這表示對於不包含所有數字並且與整條線匹配的行的向前看。

+0

這基本上是我結束了:) – Svish 2010-10-01 09:58:18

+1

所以......基本上你想出了一個複雜的表達式/ \ D /。 – 2010-10-01 18:06:43

+1

好吧,沒有\ D與我的不同,因爲它只匹配非數字。礦場返回包含整個字符串的匹配項,而只有\ D可能是每行多個匹配項。我的正則表達式返回4個匹配,而\ D返回17(對於每個非數字)。 – 2010-10-01 19:20:08

5
/^\d*[a-z][a-z\d]*$/ 

可能在一開始有一個數字,那麼至少有一個字母,然後字母或數字

+2

這是迄今爲止最容易閱讀和理解。 – enyo 2016-12-14 18:14:45

9

除非我失去了一些東西,我覺得最簡潔的正則表達式是...

/\D/ 

...或者換句話說,有沒有不位數的字符串中?

+0

如果字符串中有一個數字,就會失敗 – Svish 2010-10-01 09:56:19

+0

@Svish:你的陳述沒有意義。 – SilentGhost 2010-10-01 11:06:37

+0

@Svish,也許你應該在說些什麼之前真正嘗試一下。它比您選擇的答案簡潔得多,而且確實有效。如果字符串中有數字,它不會失敗,如果它找不到「非數字」,它就會失敗,這正是你所要求的。 – 2010-10-01 13:47:11

2

既然你說 「比賽」,不僅驗證,下面的正則表達式匹配正確

\b.*[a-zA-Z]+.*\b 

通過的測試:

abc 
a4c 
4bc 
ab4 
1b1 
11b 
b11 

失敗的測試:

123 
+0

可以'\ b。* \ D +。* \ b'工作嗎? – 2012-10-18 08:07:52

+1

@Jin,取決於,'[a-zA-Z]'與'\ D'不一樣。 '\ D'是「不是一個數字」。所以如果他們真的不想要0-9並且符合標點符號,那麼是的,'\ D'會更準確。 – CaffGeek 2012-10-18 13:03:09

6

jjnguy在中正確(如果略有冗餘)。

.*?[^0-9].* 

@Chad,您正則表達式,

\b.*[a-zA-Z]+.*\b 

也許應該允許非字母(如標點符號),即使Svish的例子並不包括一個。 Svish的主要要求是:並非所有人都是數字。

\b.*[^0-9]+.*\b 

然後,你不需要+在那裏,因爲所有你需要的是保證1個非數字是在那裏(更可能是在那裏作爲涵蓋的。*的結束)。接下來,由於這些是不必要的約束(調用對alphanum和_的引用),因此您可以在兩端刪除\ b。

.*[^0-9].* 

最後請注意,這最後的正則表達式顯示問題只帶有基本得到解決,那些已經存在了幾十年基礎(例如,無需先行功能)。在英語中,這個問題在邏輯上等同於簡單地要求在一個字符串中找到1個反例字符。

我們可以在瀏覽器中測試這個正則表達式,方法是將以下內容複製到地址欄中,將字符串「6576576i7567」替換爲您想測試的任何字符串。

javascript:alert(new String("6576576i7567").match(".*[^0-9].*")); 
0

如果我們想限制有效字符,使字符串可以從一組有限的字符進行,試試這個:

(?!^\d+$)^[a-zA-Z0-9_-]{3,}$ 

(?!^\d+$)^[\w-]{3,}$ 

/\ w + /: 匹配任何字母,數字或下劃線。任何單詞字符

2

試試這個:

/^.*\D+.*$/ 

,如果有任何辛博爾返回true,這不是一個數字。適用於所有語言。

2

,如果你想匹配至少有一個字母的世界,但它們是由數字和字母(或只是字母)形成的,這是我用什麼:

(\d*[a-zA-Z]+\d*)+ 
相關問題