2011-08-30 61 views
1

我最新,很高興能在這裏在Stackoverflow。我很長一段時間以來一直關注着這個網站。使用正則表達式驗證表單數據

我有一個輸入/文本字段。 (例如,「將您的名字」)

腳本開始以下控件在用戶發送數據:

1)控制是否該字段爲空。

2)控制字段是否超過允許的最大字符數。

3)控制該字段是否包含錯誤匹配的preg_match正則表達式。 (例如,它包含數字而不是隻有字母 - 沒有符號和重音符號)。

問題是:爲什麼如果我把這個字符「w /」,腳本不能控制?它看起來像字符串旁路控制?


您好所有球員和抱歉,如果我的答案來晚了(也用於非代碼貼^^)。

現在,談論我的問題。我檢查了只有脫機工作時纔會出現問題(我使用EasyPhp 5.3.6.1)。否則,在線測試regEx是好的。

這是我只用我說什麼上面獲得的代碼:

if (!preg_match('/^[a-zA-Z]+[ ]?[a-zA-Z]+$/', $name)) { 

     echo "Error"; 

    } 

正如你所看到的,這個代碼匹配:

  • 僅是開始(和結束)的字符串信;
  • 一個只有0或1個空格的字符串(對於有兩個名字的人,即Anna Maria);

...對不對?

(請糾正我,如果我錯了)

謝謝大家!

+2

歡迎來到stackoverflow - 你可以請張貼您的代碼?沒有它,很難回答你的問題。 – Lars

+0

歡迎來到SO。如果您編輯問題以添加您的php代碼(包括正則表達式)以及失敗的樣本,那麼我們可以提供幫助。否則,你的問題還不夠清楚。 – Shef

回答

0

它工作正常。

<?php 
$string = '\with'; 
if (preg_match('~[^0-9a-z]~i', $string)){ 
    echo "only a-Z0-9 is allowed"; //true 
} 

http://sandbox.phpcode.eu/g/18535/3

你必須確保你不把用戶輸入到你的正則表達式,因爲這將意味着你可能會檢查一些錯誤。

+0

你的正則表達式不能用於'w /'... –

+0

@LinusKleen:它的工作原理:http://sandbox.phpcode.eu/g/c602b – genesis

+0

[不,它不會](http://codepad.org/4pCgrrH9 )。你有一個指示*開始*爲'0-9a-z'的錨點。 *其餘的輸入可以是任何東西。* –

2

我的要求讀數是

  • 只有字母(上或下)可以被提供。
  • 必須提供一些東西(即非零長度的字符串)。
  • 有一個最大長度。

下面的代碼以一個非常簡單的方式檢查它,只是迴應它找到的任何錯誤;當您檢測到錯誤時,您可能想要做更有用的事情。

<?php 

$max = 10; 
$string = 'w/'; 

// Check only letters; the regex searches for anything that isn't a plain letter 
if (preg_match('/[^a-zA-Z]/', $string)){ 
    echo 'only letters are allowed'; 
} 

// Check a value is provided 
$len = strlen($string); 
if ($len == 0) { 
    echo 'you must provide a value'; 
} 

// Check the string is long to long 
if ($len > $max) { 
    echo 'the value cannot be longer than ' . $max; 
} 
2

你也可以試試這個:

if (preg_match('/^[a-z0-9]{1,12}/im', $subject)) { 
    \\ match 
} 

以上將只匹配類似@genesis'後,但如果$主題是介於幷包括1個將只匹配 - 包含12個字符。正則表達式也不區分大小寫。

+0

它匹配'1234567890AB /%--...' –