2013-02-26 107 views
2

我有一個文本區域,用戶可以在其中填寫有關他自己的信息。審查員的聯繫信息,如電話號碼或電子郵件地址

我需要檢測用戶是否填寫了電話號碼。或該文本區域中的電子郵件地址。

我知道,一個固定的模式可以用正則表達式,但如何處理各種格式,如匹配:

9 7 8 5 8 7 

9, 7, 8, 5, 8, 7 

9.7.8.5.8.7 

Or any 6 or more consecutive number sepereated with \, -, etc 

請幫助。

+0

您可以先刪除任何非數字字符r從字符串,然後驗證... – 2013-02-26 09:06:30

+0

請解釋:什麼是「cencer」;) – djot 2013-02-26 09:07:57

+0

「cencer」是檢測並刪除。 – 2013-02-26 09:08:52

回答

1

我不認爲你可以找到所有的電話號碼和電子郵件地址在一個字符串中。它可能變得非常複雜。如果你不讓人們保存他們的個人資料,因爲你懷疑他們有無效的信息,他們可能會嘗試這麼久,直到他們發現一個模式,你的正則表達式將無法處理。有人可能會以:

My name is Peter at googleD0Tcom'on. 

另一方面,你會讓人生氣,因爲你錯誤地檢測到不是欺詐的東西。比方說,你用什麼Jan Hančič的意見建議,剝離所有非數字字符(這是個不錯的辦法):

I'm 21 years old. In 2012 I already had like 45k reputation on Stackoverflow. 

這將導致21201245,可能是電話號碼的一部分。

我建議過濾看起來可疑的新的和更新的配置文件並手動驗證它們。如果因爲包含僞裝的電子郵件或電話號碼而不是有效的條目,請阻止它並使用該消息向用戶發送電子郵件以更新其個人資料。

我會檢查,如字符串:

  • 它包含:@at[at]dot.com(或您的用戶的任何其他經常使用的TLD)
  • 地帶的所有非數字字符和檢查結果數字
  • 搜索大型電子郵件公司的名稱,如Google,GMX,Yahoo,Apple(ME,iCloud)等。

下面是關於如何找到電子郵件和電話號碼的一些問題和答案唱PHP:

+1

謝謝@insertusernamehere,正確理解我的問題並給出有用的答案。 – 2013-02-26 10:50:20

0

您可以使用:

\d([,-. ] *\d){5} 

它允許, . -和空格字符。如果您想要包含更多分隔符,只需添加它們內部的[...]

0

試試這個:

$number = '12.3555'; 

if(preg_match('/[\/0-9,-\.\s\\\]{6,}/',$number) && count(array_filter(str_split($number),'is_numeric')) >= 6){ 
    echo "phone number exists"; 
} 
+0

親愛的prasanth,正斜槓,反斜槓和空格不起作用。 – 2013-02-26 09:38:46

+0

@Danial:請現在檢查答案,我編輯它。 – 2013-02-26 09:43:14

相關問題