2013-04-05 68 views
0

我想驗證給定年份輸入是否爲特定格式。年的格式應該像YYYYADYYYYBC(例如:2013AD) - 4個數字和AD/BC之間沒有任何空格。如果輸入格式正確,它應該返回true,否則返回false。 (一些預期不正確的格式是:123ADXYZADAD2013,AD, 2013,@123AD,2013ad)。我怎樣才能做到這一點?使用PHP進行簡單的年份格式驗證

在此先感謝... :)

+0

這是非常相似的最後一個問題 - http://stackoverflow.com/questions/15821635/how-to-split-a-string-based-on-位置 – Lix 2013-04-05 15:10:31

+0

上述問題也由我自己提出。但這個問題與那個沒有關係。 – 2013-04-05 15:17:06

+0

我真的不認爲有一個簡單的解決方案,而不使用適當的日期功能.. – Baba 2013-04-05 15:18:10

回答

5

使用正則表達式的表達,如/^\d{4}(AD|BC)$/

說明正則表達式的:

  • ^ - 開始字符串
  • \d{4} - 從0到9的數字重複正好是4倍
  • (AD|BC) - 一組任一字符串「AD的「或字符串」BC
  • $ - 字符串結尾

代碼

$input = "2013BC"; 
if (preg_match("/^(\d{4})(AD|BC)$/", $input, $matches)) { 
    echo "OK.\n"; 
    echo "Year: " . $matches[1] . "\n"; 
    echo "AC/BC: " . $matches[2]; 
} else { 
    echo "NOT OK!"; 
} 
+0

h2ooooooo:你沒有忘記你模式中的反斜槓嗎? 「/ \\ d {4}(AD | BC)/」 – skurton 2013-04-05 15:09:47

+0

@skurton爲什麼要使用反斜槓?這在PHP中工作得很好。 – h2ooooooo 2013-04-05 15:10:53

+0

這是對我修改的問題好嗎?看一下。 – 2013-04-05 15:13:56

0
function check($year) 
{ 
    if (is_numeric(substr($year, 0, 4)) && in_array(array("AD", "BC"), substr($year, 4,6))) 
    return true; 
    return false; 
} 

或者使用正則表達式,你可以對證/d{4}(AD|BC)/

+0

這是好的我的修訂問題? – 2013-04-05 15:13:01

+0

地雷不起作用。 – 2013-04-05 15:58:50