2012-07-19 34 views
4

要驗證輸入日期,無論是表單URL還是表單,您通常使用哪種技術?FILTER_VALIDATE vs Preg_match。哪一個使用?

我一直在尋找PHP Filters,但我很少看到他們的任何代碼。

我已經看到平時使用preg_mach,例如:

$numbers = "/^[0-9]+$/D"; 

if (preg_match($numbers, $var)){ 
    echo "is number"; 
} 

相反的:

if(!filter_var($var, FILTER_VALIDATE_INT)) 
    echo "is number"; 
} 

是否有使用一種或另一種任何優勢? 謝謝!

+1

使用過濾器,它們相對較新(PHP 5.2.0)這就是爲什麼你沒有看到它們太多 – 2012-07-19 20:18:20

+0

@Dragon - '2006-11-02'是相對較新的? – nickb 2012-07-19 20:20:45

+2

**相對**是的。宇宙年齡在120到140億年之間,所以6歲是新的 – 2012-07-19 20:22:32

回答

3

從php 5.2開始,PHP引入了一系列變量驗證的filer_功能。使用filter_var ||是很好的做法filter_input滿足您的需求。

除了它更安全的事實,它還可以爲你節省大量的開發時間,讓你的頭在正則表達式上開裂。

1

你一定要使用過濾器。它專門用於驗證。正則表達式總是自定義的,如果你自己寫,你可以忘記很多需要檢查的東西。

1

兩者都做同樣的事情,但過濾器似乎是更簡單和更好的選擇使用,你也可以使用值範圍,如果你想。

如果你想做其他的事情,只是檢查一個有效的數字和一些更復雜的涉及字符串也然後使用正則表達式可能是要走的路。

4

我的兩分錢:這取決於。

這取決於你是否應該對正則表達式使用過濾器函數的情況。其實,標準很簡單:

是否有filter_*函數存在,驗證究竟是我期待的輸入類型?

  • 如果是這樣,請使用filter_*函數。
  • 否則,使用正則表達式。

Regexs比filter_*功能更復雜,但filter_*和regexs功能都非常鬆散相關的。最有可能的是,一個正則表達式可以被用來完成filter_*函數的工作,但它不會以其他方式工作。所以,正則表達式爲表格帶來了更多的功能和靈活性,同時也更加複雜。我個人在處理簡單輸入(整數,日期,時間)時使用了一個filter_*函數,而更復雜的輸入或非常特定的或自定義的輸入(自定義標識符應以字母開頭和結尾,並且有3位數字在之間)更適合於正則表達式。

相關問題