2

我对这个 if 语句有几个问题,它检查字符串是否以“地址”结尾。

例如,这匹配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
    }
}
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_match您可以在 php.net 上阅读更多关于正则表达式的信息

于 2012-09-26T19:30:31.723 回答
0

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

于 2012-09-26T19:27:17.683 回答
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 回答