2012-09-26 30 views
2

我有這個if語句的幾個問題,它檢查一個字符串是否以「地址」結尾。PHP測試如果字符串以_text +數字結尾

例如這匹配user_address,user_address1,user_address99等。這是正確的。

問題是它也匹配user_address_location這是不正確的。

我只希望這相匹配,如果:

  1. 是與_address
  2. 此外,如果對最終如_address2
/* Only establish an address field as ADDRESS if follows "user_address1" format */ 
if((stristr($column,"address") !== false)) { 
    $parts = explode("_", $column); 
    if (!empty($parts)) { 
     // address code 
    } 
} 
+0

你能控制你的字段名嗎?如果是這樣的話,在地址和數字之間加上一個數字,例如user_address_2 user_address_33,那麼你可以使用explode('_',$ name)來獲得值,如果最後一個值是一個數字,你有你的地址 –

+0

我想我已經想出了一個方法做到這一點沒有額外的_ –

回答

4

這可能是使用正則表達式

if(preg_match('/^user_addesss\d*$/', $column) === 1){ 
} 
+0

沒有正則表達式的我的方法更快 –

0

變化if((stristr($column,"address") !== false)) {的數字結束if(preg_match("/^user_address[0-9]*/", $column) == 1) {

+0

這將只匹配行末的一個數字。由於OP要匹配零個或多個數字,它應該以'[0-9] *'結尾。 – slugonamission

+0

哦,謝謝! –

1

使用正則表達式一個像樣的地方:

if(preg_match('/_address(\d+)?$/', $column)) 
{ 

} 

如果你是做了很多字符串的比較和操縱這個Web應用程序將是非常有用的你: http://gskinner.com/RegExr/

它允許您針對內容開發正則表達式,並對匹配和替換進行實時反饋。

1

這裏可以使用正則表達式的$。當使用正則表達式$指定字符串的結尾

所以,你可以搜索正則表達式:

$regexp = "^.*_address\d+$"; 

^是開始,.*表示任意數量的任意字符_address是你想要什麼搜索,\d+表示它可以在地址後面有數字,並且$表示字符串的結尾。在php.net

你可以閱讀更多關於正則表達式,並preg_match

0

我想找到一個辦法做到這一點沒有正則表達式,對不起,我應該做的是,在這個問題清楚了。

但我想我已經找到了一種方法,不知道它是否可以改進或性能與正則表達式相比。

/* First establish it could be an address field e.g "user_address1" format */ 
$column_address = strpos($column, "_address"); 
if($column_address !== false) { 

    // remove everything before "_address" 
    $last = substr($column, $column_address); 

    // Check if "_address" OR remove "_address" and check if int 
    if($last == "_address" || intval(substr($last, 8))){ 
+0

說實話,有點矯枉過正。他們開發了正則表達式,所以我們不必這樣做。但如果它適合你,沒有理由不按你的方式去做。 – Flosculus

+1

@DavidThomas - 這個問題現在沒有刪除 – Kev

相關問題