2013-10-25 111 views
0

我想要一個用戶輸入他的城市和國家用逗號隔開,以將數據存儲在我的數據庫中。現在PHP - 檢查在逗號後面是否有一個單詞?

我當前的代碼是:

if (empty($_POST['location']) || substr_count($_POST['location'], ',') != 1) 

但如果逗號是有這個只檢查。我想檢查逗號前面是否有逗號和一個單詞。 此外,這些詞應該至少有2個字符,因爲我猜沒有一個國家或城市有一個字符(?)。

編輯:我剛剛發現有一個城市只有一個字符。所以請忘記我最後一句話。

+1

我認爲這是對正則表達式 –

+0

它更容易爲我們瞭解你想匹配,當你提供一個例子超值,喜歡'城市,國傢什麼樣的情況下 - >確定,城市,國家, - >壞,...' –

+0

@ZathrusWriter一個正確的格式將是:'城市,國家'這就是爲什麼只有一個逗號應該被允許,並在該逗號後面的AND之前的字符串。 – AlexioVay

回答

3

當然。 preg_match/,\s*\w{2,}/會告訴你:

if (preg_match('/,\s*\w{2,}/', $_POST['location'])) { 
    //Yep - there's a comma followed by at least two characters in there! 
} 

屍檢:

  • , - 文字,字符
  • \s* - 空間/製表/換行符重複0到無限次
  • \w{2,} - 任意字母重複2到無限次

看來,你還檢查空的。

<?php 
    $invalid = false; 
    $split = preg_split('/,\s*/', $_POST['location']); 
    foreach ($split as $part) { 
     if (strlen($part) < 2) { 
      $invalid = true; 
      break; 
     } 
    } 

    if (!$invalid) { 
     echo 'Success!'; 
    } else { 
     echo 'Error!'; 
    } 
?> 

如果你需要一個正則表達式來爲你做這項工作,你可以這樣做:

if (preg_match('/^(\w{2,},\s*)*(\w{2,})$/', $_POST['location'])) { 
    echo 'Success!'; 
} else { 
    echo 'Error!'; 
} 

DEMO

OK city,country 
ERROR ok, city,country, 
ERROR n, foo, bar 
ERROR foo, bar, n 
ERROR ,foo, bar, test 
OK foo,bar 
OK foobar 
+0

該死的你爲什麼輸入如此之快的男人? – pythonian29033

+0

@ pythonian29033哈哈 - 對不起! :) – h2ooooooo

+1

+10你的正則表達式比我的好,但我只想到1k代表你知道嗎? – pythonian29033

0

正則表達式是你的朋友

if(empty($_POST['location']) || !preg_match('/.+, .+/', $_POST['location']) 
+0

我有點困惑,因爲我之前沒有使用RegEx。我無法按照我想要的方式工作。我真正想要的是這樣的:1)以[a-zA-Z]格式開頭的一個或多個字符。 2)在第一個字符後面的整個輸入字段中只允許使用一個逗號。 3)以[a-zA-Z]格式的逗號後面的一個或多個字符。 4)在這個角色後面沒有特殊字符,逗號或類似的東西。 5)不允許空輸入。 6)不只有一個單詞或字符沒有逗號。7)只有這種格式:城市,國家(如果用戶在逗號後放置空格,則無關緊要) – AlexioVay

0

做到這一點:

if(preg_match('/^.[a-zA-Z]+.()?,.()?.[a-zA-Z]+$/i', $_POST['location'])) 
+0

我有點困惑,因爲我之前沒有使用過RegEx。我無法按照我想要的方式工作。我真正想要的是這樣的:1)以[a-zA-Z]格式開頭的一個或多個字符。 2)在第一個字符後面的整個輸入字段中只允許使用一個逗號。 3)以[a-zA-Z]格式的逗號後面的一個或多個字符。 4)在這個角色後面沒有特殊字符,逗號或類似的東西。 5)不允許空輸入。 6)不只有一個單詞或字符沒有逗號。 7)只有這種格式:城市,國家(如果用戶在逗號後放置空格,則無關緊要) – AlexioVay

+0

好的,試試我的新正則表達式,那個應該適合你的情況。請注意,正則表達式周圍的^ $字符會告訴它從頭到尾進行比較 – pythonian29033

相關問題