2014-01-06 54 views
-2

向上至32和64欲在其中我想向上32個從1開始和上至64從1正則表達式只從1

我試圖用以下驗證值 一個正則表達式: ^1|2|64$但它不工作,並且^1|2|32$ 但未能找到正確的答案。請幫助。

+0

當然1到64包括1到32,所以我不明白你爲什麼單獨提到它們。請解釋你的意思! – Vorsprung

+3

正則表達式不是範圍驗證的理想工具,您最好將其解析爲帶有內置函數的int。什麼情況會使你得到正則表達式? – 16807

+0

嗨Vorspring,我們創建了兩個字段,我們希望檢查值只有32和64。 – user3134939

回答

3

正則表達式可能不是一個很好的解決此問題的方法。爲什麼不把它解析爲一個整數,然後做一些簡單的「> 0 & & < 33」檢查類型?

但是,既然你問,這裏是我的回答: 爲1-32:

^(?:(?:3[0-2])|(?:[1-2]\d)|[1-9])$ 

(在行動:http://rubular.com/r/oVKeR28T98

爲1-64:

^(?:(?:6[0-4])|(?:[1-5]\d)|[1-9])$ 

(在行動:http://rubular.com/r/Zu5Kk3zuDh

我可能使那些r egexes比他們可能有點醜陋,但正如我所說,這幾乎肯定不是你應該尋找的答案!

2

正則表達式:

^([1-9]|[12][0-9]|3[012])$ 

將爲1-32工作,

^([1-9]|[1-5][0-9]|6[0-4])$ 

將爲1-64工作。

說明可以在這裏找到:

這麼說,我不認爲你應該在這種情況下使用正則表達式。一個簡單的檢查,如果num >= 1num <= 32(或num <= 64)應該工作。

+0

當用戶輸入33值不被接受時,在用戶輸入65值不被接受的情況下類似的一秒提交。 – user3134939

+0

@ user3134939你可以用不同的話來說話嗎?我無法真正理解你想說什麼。 –

1

下面是用正則表達式爲1〜32有線我的Perl的測試程序(修改不匹配爲零,感謝TimLord)

use warnings; 
use strict; 

my $r=qr/^([123456789]|[123][012]?|[12]\d)$/; 

for my $n (1..32) { 
    die $n unless($n =~ /$r/); 
} 
for my $n (33..64) { 
    die $n if ($n =~ /$r/); 
} 

for my $n(65..99) { 

    die $n if ($n =~ /$r/); 
} 

而且這裏有一個1到64,略更好的測試

use warnings; 
use strict; 

my $r=qr/^([123456789]|[12345]\d|6[])$/; 

for my $n(-32..0) { 
    die $n if ($n =~ /$r/); 
} 
for my $n (1..32) { 
    die $n unless($n =~ /$r/); 
} 
for my $n (33..64) { 
    die $n unless ($n =~ /$r/); 
} 

for my $n(65..1000) { 
    die $n if ($n =~ /$r/); 
} 
+0

那個正則表達式匹配「0」! –

+0

@TomLord所以它,淘氣我。應該已經測試過了。現在修復 – Vorsprung