2011-01-07 26 views
0

運行我敢肯定,我知道問題是什麼,但我能不能解決這對我的生活,我只是不知道在做這點。PHP的正則表達式我的本地服務器上的工作 - 不工作的遠程主機上PHP4

我想要做的就是限定名字和姓氏字段的輸入。此代碼是工作在我的本地服務器上運行PHP5:

<?php 
$regex = "John's Jerod"; 
if (!preg_match("/^[A-Za-z\'\,\.\s]+$/", $regex)) { 
      echo "ERROR!"; 
     } else { 
    echo "NO ERROR!"; 
    } 
?> 

正如預期的那樣,這將返回沒有錯誤!但是當我我活的服務器上運行此,我只能用相同的數據出現錯誤。

我確定這是逗號扔它!我很確定,因爲我運行的php版本在John的名字中做了一個像'\'的自動轉義,所以我在所有輸出上運行striptags,並且仍然是同樣的錯誤。

任何人都知道我在做什麼錯或我該如何解決這個問題?

到目前爲止,我在「bug」中已經有大約8個小時了。經歷了40多個RegEex的變體,沒有運氣。

我檢查和三重檢查我所有的表單字段名稱,乏等,以確保一切matcheds和一切正常。

SOS

+1

服務器的操作系統和PHP版本相同或相似?如果你是從Windows到Linux/Mac的話,這可能是行結束。 – Blender 2011-01-07 20:16:08

回答

0

你的正則表達式並不需要所有的反斜槓。它應該是這樣的:

"/^[A-Za-z',\.\s]+$/" 

此外,你指的是使用striptags()。如果您的服務器啓用了魔術引號,則應該使用stripslashes()。

[編輯正則表達式]

+0

沒有。那也行不通。這是我的錯誤。我正在使用stripslashes(),如:$ first_name = stripslashes(mysql_real_escape_string($ _ POST ['fname'])); – OldWest 2011-01-07 20:30:02

+0

大衛鮑爾斯,我想你發佈了我確切的表達方式?你的意思是別的嗎? – OldWest 2011-01-07 20:32:18

1

嘗試專門爲1檢查。根據文檔,如果有匹配(因爲它停在一個),它將返回FALSE(嚴格檢查)出錯,0(嚴格檢查),否則返回1

此外,根據我自己的喜好,我使用〜符號表示我的正則表達式。就像大衛鮑爾斯所說(只有他根本沒有糾正它),你並不需要大多數反斜槓(只限於時期和空間)。

<?php 
$regex = "John's Jerod"; 
if (preg_match("~^[A-Za-z',\.\s]+$~", $regex) !== 1) { 
      echo "ERROR!"; 
     } else { 
    echo "NO ERROR!"; 
    } 
?> 

希望這有助於!

編輯:另外,你說你正在使用strip_tags?這剝離了字符串中的任何HTML標籤 - 不是斜槓。您需要strip_slashes剝離斜線,strip_tags;)

-1

我也有類似的問題,但最後我的身影,我的服務器有一個diferent cultere設置我介意lenguaje,和國家配置,我成立了像我測試服務器和一切工作

相關問題