2015-08-31 96 views
1

我遇到了一個常見問題,我似乎無法確定原因。我正在爲網站上的註冊表單上的多個字段致力於server side validation。這是PHP塊:正則表達式不一致驗證

if ('phone-name' == $tag->name) { 
     $value = $_POST[$tag->name]; 
     if (!preg_match('/\+([0-9])([ .-]*\d){7,12}/', $value)) { 
      $result->invalidate($tag, "You must enter a valid number: $value is not valid"); 
     } 
    } 

regex我使用應只允許用戶輸入:

  • 的 「+」 號
  • 空間,點和連字符
  • 和任何數字從0到9

但是,當我運行以下測試時,我得到這些結果:

測試1:無效輸入

+3588<script>alert(1)</script> 

TEST 2:有效輸入

+35388888888<script>alert(1)</script>

有我丟失的東西嗎?爲什麼正則表達式對TEST 2而不是TEST 1起作用?任何幫助深表感謝。

感謝

+0

爲什麼會得到低投票?完全有效的問題 – Javacadabra

+0

匹配,編號範圍'0-9'需要重複'{7,12}'分鐘'7'到最大'12'次。現在,'3588'是四個,所以不匹配,'35388888888'是'11',所以它匹配 – Viral

+0

什麼是''? –

回答

1

因爲您的正則表達式匹配字符串開頭的數字。可以使用^$匹配字符串長度(開始,結束),截斷字串第一,使用用strip_tags等

實施例:

http://www.regexr.com/3bmfm

^\+([0-9])([ .-]*\d){7,12}$

從取出^$看到它匹配第二行的模式的開始和結束。

+0

感謝您的幫助。這解決了這個問題。 – Javacadabra

+0

不客氣,很高興我能提供幫助。 –

-5

因爲你指定了多少次給定模式應該由{7,12}重複。

+4

雖然技術上準確這並不能真正解釋Java在任何有意義的深度上做了什麼錯誤,也沒有提供任何有用的建議。 –