是否可以寫一點不只有包含數字的所有字符串相匹配的正則表達式?如果我們有這些字符串:正則表達式:如何匹配一個字符串,它不僅是數字
- ABC
- A4C
- 4BC
- AB4
應該匹配ŧ他四個第一,但不是最後一個。我曾嘗試擺弄周圍在使用RegexBuddy與向前看符號之類的東西,但我似乎無法弄清楚。
是否可以寫一點不只有包含數字的所有字符串相匹配的正則表達式?如果我們有這些字符串:正則表達式:如何匹配一個字符串,它不僅是數字
應該匹配ŧ他四個第一,但不是最後一個。我曾嘗試擺弄周圍在使用RegexBuddy與向前看符號之類的東西,但我似乎無法弄清楚。
(?!^\d+$)^.+$
這表示對於不包含所有數字並且與整條線匹配的行的向前看。
除非我失去了一些東西,我覺得最簡潔的正則表達式是...
/\D/
...或者換句話說,有沒有不位數的字符串中?
如果字符串中有一個數字,就會失敗 – Svish 2010-10-01 09:56:19
@Svish:你的陳述沒有意義。 – SilentGhost 2010-10-01 11:06:37
@Svish,也許你應該在說些什麼之前真正嘗試一下。它比您選擇的答案簡潔得多,而且確實有效。如果字符串中有數字,它不會失敗,如果它找不到「非數字」,它就會失敗,這正是你所要求的。 – 2010-10-01 13:47:11
既然你說 「比賽」,不僅驗證,下面的正則表達式匹配正確
\b.*[a-zA-Z]+.*\b
通過的測試:
abc
a4c
4bc
ab4
1b1
11b
b11
失敗的測試:
123
可以'\ b。* \ D +。* \ b'工作嗎? – 2012-10-18 08:07:52
@Jin,取決於,'[a-zA-Z]'與'\ D'不一樣。 '\ D'是「不是一個數字」。所以如果他們真的不想要0-9並且符合標點符號,那麼是的,'\ D'會更準確。 – CaffGeek 2012-10-18 13:03:09
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].*"));
如果我們想限制有效字符,使字符串可以從一組有限的字符進行,試試這個:
(?!^\d+$)^[a-zA-Z0-9_-]{3,}$
或
(?!^\d+$)^[\w-]{3,}$
/\ w + /: 匹配任何字母,數字或下劃線。任何單詞字符
試試這個:
/^.*\D+.*$/
,如果有任何辛博爾返回true,這不是一個數字。適用於所有語言。
,如果你想匹配至少有一個字母的世界,但它們是由數字和字母(或只是字母)形成的,這是我用什麼:
(\d*[a-zA-Z]+\d*)+
這基本上是我結束了:) – Svish 2010-10-01 09:58:18
所以......基本上你想出了一個複雜的表達式/ \ D /。 – 2010-10-01 18:06:43
好吧,沒有\ D與我的不同,因爲它只匹配非數字。礦場返回包含整個字符串的匹配項,而只有\ D可能是每行多個匹配項。我的正則表達式返回4個匹配,而\ D返回17(對於每個非數字)。 – 2010-10-01 19:20:08