2016-08-25 106 views
1

我正在開發一個音樂項目。輸入只包含字母和數字。正則表達式是我們設定的限制條件之一。正則表達式爲數字1-25

所以,這讓我的數字在26以下,但如果像27這樣的數字顯示出來,它仍然拿起2和7.我怎麼能排除所有數字26和以上?謝謝!

/[0-2][0-5]|[1-9]/g 

我要補充...這是一個大的字符串前和後的數字字母和空格的一部分。所以我必須識別字符串中的數字並將其拉出。只使用string.prototype.match()和正則表達式。很長的故事。 THX

+0

我想你不能這樣做,但會更容易使用它的數值而不是簡單的文本。無論如何讀這個http://stackoverflow.com/questions/8592488/regex-how-can-i-match-all-numbers-greater-than-49 – exoddus

+0

這似乎並不適用於所有選項。不幸的是需要使用正則表達式。不是我的選擇。感謝 – Fedreg

+0

輸入數據結構如何?數字是否由特殊字符分隔(例如,數字之間是否至少有一個空格)? – muton

回答

2

[0-2][0-5]|[1-9]正則表達式,接着用0-5數字或數字1-9字符串中的任何地方一個0-2位的任何序列匹配。

以匹配1個人值,直到25,你可以使用

/\b(0?[1-9]|1[0-9]|2[0-5])\b/g 

regex demo

圖案的詳細資料

  • \b - 領先的單詞邊界
  • (0?[1-9]|1[0-9]|2[0-5]) - 要麼替代的:
    • 0?[1-9] - 一個可選的領先0隨後從1一個數字,9
    • 1[0-9] - 10直到19
    • 2[0-5] - 20直到25
  • \b - 尾隨邊界
+0

Wiktor,謝謝你的解釋。問題是數字前後會有空格。如果我沒有說清楚並浪費你的時間,我很抱歉。只有謹慎使用正則表達式,並沒有意識到這將是如此複雜。我將重新編輯我的帖子 – Fedreg

+0

那麼,你正在提取它們?用'\ b'替換'^'和'$'。如果還有其他問題,請隨時發表評論。 –

+0

這樣做!再次,遺憾的是缺乏清晰度! – Fedreg

2

啊......所以你現在... 0-5,10-15,20-25或0-9的

你有正確的想法,這個想法只是錯誤的應用程序。

([01]?[0-9]|2[0-5]) 

// should omit those pesky one-offs you're seeing as mentioned in the comments. 
^([01]?[0-9]|2[0-5])$ 
\b([01]?[0-9]|2[0-5])\b 

// if you also want to exclude 0... 
^([1-9]|1[0-9]|2[0-5])$ 
\b([1-9]|1[0-9]|2[0-5])\b 

象徵性地表示0到19之間的任何數字(w /或w/o預置0)或20-25。

+0

感謝您的幫助。我明白了......感謝您的解釋。這似乎直到19,但返回20-25作爲單個整數(2,0 2,5等)。可悲的是,我必須使用正則表達式。 – Fedreg

+0

^([01]?[0-9] | 2 [0-5])$或前導/尾隨\ b –

+0

Steve,謝謝。我編輯了我的帖子,注意可能有前後的空格。對於原本不包括在內的道歉。沒有意識到這很重要;新的正則表達式。 – Fedreg

0

我建議沿東西線(坐或刪除一些我添加的元素,因爲我不知道您的具體要求)

/^(([ 01]?[1-9])|2[0-5])$/ 
  • ^...$匹配整個輸入,以避免匹配一個兩位數輸入
  • ?以允許一位數輸入
  • |以允許兩個的情況「第一位數字爲0或1」的個位數和「第一位= 2」

但總而言之,比正則表達式更好的工具來完成這項工作,比如解析數字並做一個簡單的比較。

0

^\d$|^1\d$|^2[0-6]$將匹配0-26。

但是,這不是你應該用正則表達式解決的問題。更好的方法是測試與運營商的數量像<<=

myNum < 27 // is 0-26 
相關問題