2

I have a couple of issues with this if statement which checks if a string ends with "address".

E.g this matches user_address, user_address1, user_address99, etc. Which is correct.

The problem is that it also matches user_address_location which is not correct.

I only want this to match if:

  1. Is ends with _address
  2. Also if it has a number on the end e.g _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
    }
}
4

5 に答える 5

4

これは、正規表現を使用するのに適切な場所かもしれません

if(preg_match('/^user_addesss\d*$/', $column) === 1){
}
于 2012-09-26T19:28:12.143 に答える
1

正規表現を使用します。

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

}

多くの文字列の比較と操作を行っている場合、この Web アプリケーションは非常に便利です: http://gskinner.com/RegExr/

一致と置換に関するライブ フィードバックを使用して、コンテンツに対する正規表現を開発できます。

于 2012-09-26T19:30:03.657 に答える
1

$ここで正規表現を利用できます。正規表現を使用し$て文字列の末尾を指定する場合

したがって、次の正規表現を検索できます。

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

^は先頭で、.*任意の数の任意の文字_addressが検索対象であることを示し\d+、アドレスの後に数字を含めることができることを$示し、文字列の末尾を示します。

正規表現の詳細については、preg_matchphp.netを参照してください。

于 2012-09-26T19:30:31.723 に答える
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))){
于 2012-09-26T20:42:49.533 に答える
0

if((stristr($column,"address") !== false)) {に変更if(preg_match("/^user_address[0-9]*/", $column) == 1) {

于 2012-09-26T19:27:17.683 に答える