检查字符串是不是相等,以 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 结尾的主要内容,如果未能解决你的问题,请参考以下文章