2016-06-08 81 views
0

我需要一個正則表達式,它需要一個最小值和一個最大值來確定有效輸入,並且我希望最大值和最小值是動態的。數字之間的正則表達式

我一直試圖讓這個使用這個鏈接 https://stackoverflow.com/a/13473595/1866676

做,但不能得到它的工作。所以有人請讓我知道如何做到這一點。

------更新上Wiktor的Stribiżew要求---------

讓我們說,我想打一個HTML5的輸入框,我希望它只是從100接收號碼1999

這樣的regex會是什麼樣子? 正則表達式本身,應該有什麼代碼應該使用它,因爲我打算在Android,iOS和網頁上使用這個

+2

你能否請你更新你的問題1)你的樣本輸入與預期的行爲2)你究竟嘗試了什麼以及如何3)以及當然你的編程語言。 –

+0

我建議你看看[如何編寫一個匹配IPv4的正則表達式](https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113/)。這不是一個答案(甚至是一個論壇),但是讀起來很有趣,並強調了爲什麼你可以用正則表達式做很多事情,但是你不應該總是這樣做。至於你的問題,如果數字不固定,你顯然不能寫一個靜態正則表達式,如果你可以使用一種編程語言來建立表達式,你可以用這種語言來比較一下數字的簡單方式。 –

+0

@WiktorStribiżew嘗試按照您的要求更新 – DaCh

回答

5

這裏是那種正則表達式是如何運作的

ones: ^[0-9]$ // just set the numbers -- matches 0 to 9 
tens: ^[1-3]?[0-9]$ //set max tens and max ones -- matches 0 to 39 
tens where max does not end in 9 ^[1-2]?[0-9]$|^[3][0-4]$ // 0 to 34 
only tens: ^[1][5-9]$|^[2-3][0-9]$|^[4][0-5]$ // 15 to 45 

在這裏,讓我們挑選一個任意數量1234年至2345年

^[1][2][3][4-9]$| 
^[1][2][4-9][0-9]$| 
^[1][3-9][0-9][0-9]$| 
^[2][0-2][0-9][0-9]$| 
^[2][3][0-3][0-9]$| 
^[2][3][4][0-5]$ 

https://regex101.com/r/pP8rQ7/4

基本上中間系列的結局總是需要是一個直線範圍,可以達到9 ,除非我們正在處理的地方,如果它不能,每當我們有一個不能從0開始的值,並且一旦我們達到一個不能以9結尾的值並提前中斷並將其設置爲下一個條件時,你必須向上建立它。

注意模式,因爲每個地方固化。還要記住,在處理從較低到較高的地方時,可選的操作員?應該使用。

它有點複雜,但它幾乎不可能設計一個定製的範圍與思考。

如果您更具體,我們可以製作一個確切的示例,但通常這是如何完成的:beginning-range|middle-range|end-range 在某些情況下,您應該只需要開始或結束範圍,如最小或最大不結束9.這個?意味着它是可選的範圍。 (例如,在第一種情況下,它可以讓我們擁有單數和雙數。

所以100 - 1999年這是相當簡單實際上,因爲你有很多9的和0的

/^[1-9][0-9][0-9]$|^[1][0-9][0-9][0-9]$/ 

https://regex101.com/r/pP8rQ7/1

注意:單值不需要範圍[N]我只是說他們可讀性。

+0

'這裏,如果理解它,我們可以選擇任意數字1234到2345'。如果我使用該正則表達式,我將能夠輸入2344?我對嗎? – DaCh

+0

呃等我犯了一個錯誤 - 修復 – yosefrow

+1

你有我的信息+1,但這個表達需要放在某個地方,它是在整個方法開始閃爍的大圖。如果你把它放在''input pattern =「」>'屬性中,你已經寫了一個複雜的'max/min'替代。如果您使用JavaScript進行驗證,那麼您已經爲'<' and '>'寫了一個錯綜複雜的替代品。等等。 –

1

本質上,你不能。

對於每個數字範圍,都存在一個匹配該範圍中的數字的正則表達式,因此可以編寫可生成此類正則表達式的代碼。但是這樣的正則表達式並不是對範圍末端進行簡單的重新格式化。

但是,與僅使用數字方法檢查數字的代碼相比,此類代碼需要編寫巨大的工作量和複雜性。

+1

不是這方面的專家,但既然它是html5,他需要正則表達式來過濾它。如果不是,他將不得不將值傳遞到另一個頁面來驗證它們? '^ [1-9] [0-9] [0-9] $ |^1 [0-9] [0-9] [0-9] $'會抓住這一切嗎? – Andreas

+0

@Andreas你是對的。我爲此開發了一個系統。它比人們想象的要容易。查看下面的答案 雖然它在一些情況下肯定可能是矯枉過正,因爲波希米亞人建議 – yosefrow

1

隨着HTML 5只是把一定範圍的輸入...

<form> 
    Quantity (between 100 and 1999): 
    <input type="number" name="quantity" min="100" max="1999"> 
</form> 

用正則表達式:

^([12345679])(\d)(\d)|^(1)(\d)(\d)(\d) 

所以,如果你需要創建dinamically正則表達式這是可能的,但有點棘手和複雜的

+0

出於好奇...純HTML可以實際執行限制,還是僅相應地設置元素的樣式? –

+0

該值將受到限制,但注意:Internet Explorer 9和更早版本不支持輸入標記的最大和最小屬性.-- 注意:最大和最小屬性在Internet Explorer 10中不適用於日期和時間(或更新版本)或Firefox,因爲IE 10+和Firefox不支持這些輸入類型.--注意:任何人都可以僞造客戶端驗證,所以它在服務器上驗證始終也很重要http://www.w3schools .com/tags/tryit.asp?filename = tryhtml5_input_max_min – yosefrow

+0

當然,任何輸入都可能是假的客戶端,所以你需要一個驗證服務器端(JavaScript可以跳過更多的difficoulty但跳過正常輸入)。 – MrPk

相關問題