2012-01-18 63 views
1

我想驗證它包含其中,每四個數字是由一個連字符分隔的數字字符串,例如1111-2222-3333-4444PHP:包含數字,通過連字符(通過的preg_match可能的)分離驗證字符串?

我試圖做一些驗證的,所以我可以保證該格式正在使用(16位數字,三個連字符和其他)。我有這個preg_match它只檢查數字,但我需要接受連字符和這種格式。

preg_match('/^[0-9]{1,}$/', $validatenumbers) 

我試圖用正則表達式來做到這一點,但不幸的是它是不是我的最強的側面,所以我一直無法正確驗證數字。

重要的是,它是在PHP和JavaScript不,因爲在瀏覽器中「關閉」的JavaScript的能力。

回答

4
preg_match("/^([0-9]{4}-){3}[0-9]{4}$/", $input); 

([0-9]{4}-){3}恰好匹配3組4位數字後跟連字符。由另一個組[0-9]{4}(4位不連字符)終止。

+0

這是非常好的,+1 +1 – 2012-01-18 18:05:20

+3

但'([0-9] {3} - ){3}'匹配3個數字,而不是4 **編輯**,你可以寫'\ D'而不是'[0-9]'但是這是個人喜好我猜 – Rudie 2012-01-18 18:06:02

+0

@Rudie哇感謝,一個錯字,然後通過複製/粘貼複製 – 2012-01-18 18:16:43

0

嘗試:

if(preg_match('#^\d{4}-\d{4}-\d{4}-\d{4}$#',$string){} 
0

如果您需要以匹配正確的格式模式將'~^\d{4}-\d{4}-\d{4}-\d{4}$~',或者你可以更一般寫:'^(\d+-)*\d+$'(這將匹配11 11-11111 ...等上),

1
preg_match('/^[0-9]{4}\-[0-9]{4}\-[0-9]{4}\-[0-9]{4}$/',$numbers); 

我認爲這應該工作。

0

這看起來像一個信用卡號碼。如果是這樣的話,你應該使用Luhn checksum而不是簡單的正則表達式。

相關問題