php测试如果字符串以_text + number结尾

时间:2012-09-26 19:23:34

标签: php

我在if语句中遇到了一些问题,它检查字符串是否以“address”结尾。

例如,这匹配user_addressuser_address1user_address99等。这是正确的。

问题是它也匹配user_address_location,这是不正确的。

我只想在以下情况下匹配:

  1. 以_address结尾
  2. 此外,如果它有一个数字,例如_address2
  3. /* 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
        }
    }
    

5 个答案:

答案 0 :(得分:4)

这可能是使用正则表达式的好地方

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

答案 1 :(得分:1)

使用正则表达式:

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

}

如果您正在进行大量字符串比较和操作,那么此Web应用程序对您非常有用:http://gskinner.com/RegExr/

它允许您针对内容开发正则表达式,并提供有关匹配和替换的实时反馈。

答案 2 :(得分:1)

您可以在此处使用$正则表达式。使用正则表达式时$指定字符串的结尾

因此,您可以搜索此正则表达式:

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

^是开始,.*表示任意数量的任何字符_address是您要搜索的内容,\d+表示它可以在地址后面有数字,并且$表示字符串结束。

您可以阅读有关正则表达式的更多信息,以及php.net上的preg_match

答案 3 :(得分:0)

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

答案 4 :(得分: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))){