检查字符串是不是相等,以 r 开头以 match 结尾

Posted

技术标签:

【中文标题】检查字符串是不是相等,以 r 开头以 match 结尾【英文标题】:Check if string equals, starts withs or ends with match检查字符串是否相等,以 r 开头以 match 结尾 【发布时间】:2012-12-31 02:17:42 【问题描述】:

我将如何改进此功能: 在数组中搜索以下任一字段名称:

a) 完全匹配 b) 用“_”检查字符串是否以 开头 c) 以“_”结尾 检查字符串是否以

例如,我有一个列名列表:

array(
    'customer_name',
    'customer_lastname',
    'customer_streetname',
    'customer_dob',
    'system_modified'
)

还有一个带有格式化条件的数组:

array(
    '_dob' => 'date_dob',
    '_name' => 'varchar',
    'customer_name' => 'html_text',
    'system_' => 'required'
)

结果将条件应用于列名:

1. customer_name = html_text (exact matches have higher preference)
2. customer_lastname = varchar
3. customer_streetname = 
4. customer_dob = dob
5. system_modified = required

目前有这个:

protected function matchPatterns($string) 
    $return = array();
    $parrerns = $this->_normaliseArrayItem($this->getPatterns());
    foreach ($parrerns as $match) 

        // If exact match
        if($string == $match) 
            $return[] = $match;
            break;
        // Else if begins with _ and ends with string.
         elseif($string[0] == "_" && substr_compare($string, $match, -strlen($match), strlen($match)) === 0) 
            $return[] = $match;
        

     // end loop
    return $return;



/**
 * Return an array of validation patterns.
 *
 * @return string[]
 */
public function getPatterns() 
    return $this->_patterns;



/**
 * Returns an item as array rather than single item.
 *
 * @param string[] $data
 * @return string[]
 */
protected function _normaliseArrayItem($data) 
    if(!isset($data[0])|| !is_array($data)) 
        $tmp[] = $data;
        $data = $tmp;
    
    return $data;

【问题讨论】:

您可以使用===== 精确匹配rtim 和ltrim,substr 不需要regx 我其他方式更好 php.net/manual/en/function.preg-match.php 见***.com/questions/2160210/…和***.com/questions/1962031/… customer_dob = dob 如果_dob 的值是date_dob(而不是required),你怎么得到它。很难理解你的逻辑。也许您可以描述或在这里做什么,并最终尝试为您的问题找到另一种解决方案。 为什么要返回一个数组?预期结果似乎只是每个项目的单一格式条件。 【参考方案1】:
foreach ($parrerns as $match => $format) 
    // If exact match
    if($string == $match) 
        $return[] = $format;
        break;
    // Else if begins with _ and string ends with it.
     elseif($match[0] == "_" && substr_compare($string, $match, -strlen($match), strlen($match)) === 0) 
        $return[] = $format;
    // Else if ends with _ and string begins with it
     eleif (substr($match, -1) == "_" && substr_compare($string, $match, 0, strlen($match)) == 0) 
        $return[] = $format;
 

【讨论】:

【参考方案2】:

改编自 Marc 的解决方案。

if(substr($str, 0, 1) === '_' || substr($str, -1) === '_') 
    // it starts or ends with an underscore
 else if($str == $match) 
    // it's the same

不过我不完全理解你的问题。

【讨论】:

正则表达式只是查看字符串的第一个字符是相当繁重的......为什么不substr($str,0,1) == '_'or $str[0] == '_' 它们是,但对于简单的事情,它们的开销相当大。

以上是关于检查字符串是不是相等,以 r 开头以 match 结尾的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是以正则表达式数字开头

检查字符串是不是以 XXXX 开头

如何检查单词是不是以给定字符开头?

检查字符串是不是以某些东西开头? [复制]

在 Bash 中,如何检查字符串是不是以某个值开头?

如何检查变量是不是以特定字符串开头? [复制]