aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Enderlin <ivan.enderlin@hoa-project.net>2013-08-15 14:59:23 +0200
committerIvan Enderlin <ivan.enderlin@hoa-project.net>2013-08-15 15:12:22 +0200
commit4bb461bab9bdb56f5046f9c0c29c93f3ed2e419c (patch)
tree0cafcf00829e100de8b788b7760bc76b22539b38
parent72c5e92b09618519bb7f2e31922732a157fb0eb6 (diff)
downloadUstring-4bb461bab9bdb56f5046f9c0c29c93f3ed2e419c.zip
Ustring-4bb461bab9bdb56f5046f9c0c29c93f3ed2e419c.tar.gz
Ustring-4bb461bab9bdb56f5046f9c0c29c93f3ed2e419c.tar.bz2
Add BEGINNING and END constants.
-rw-r--r--Documentation/Fr/Index.xyl20
-rw-r--r--String.php50
2 files changed, 53 insertions, 17 deletions
diff --git a/Documentation/Fr/Index.xyl b/Documentation/Fr/Index.xyl
index 7e55b80..80a2570 100644
--- a/Documentation/Fr/Index.xyl
+++ b/Documentation/Fr/Index.xyl
@@ -124,9 +124,10 @@ $japanese = new Hoa\String('私はあなたを愛して');</code></pre>
couramment appelée le <em lang="en">padding</em> (pour des raisons historiques
remontant aux machines à écrire). C'est pourquoi nous trouvons la
méthode <code>Hoa\String::pad</code> qui prend trois arguments : la taille
- minimum, les caractères à ajouter et un booléen indiquant si nous devons
- ajouter en fin ou en début de chaîne (par défaut en fin avec
- <code>true</code>).</p>
+ minimum, les caractères à ajouter et une constante indiquant si nous devons
+ ajouter en fin ou en début de chaîne (respectivement
+ <code>Hoa\String::END</code>, par défaut, et
+ <code>Hoa\String::BEGINNING</code>).</p>
<pre><code class="language-php">echo $arabic->pad(20, ' ');
/**
@@ -144,9 +145,16 @@ $japanese = new Hoa\String('私はあなたを愛して');</code></pre>
* أحبك
*/</code></pre>
<p>Si nous voulons supprimer d'autres caractères, nous pouvons utiliser son
- seul argument qui doit être une expression régulière. Par exemple, pour
- supprimer tous les nombres et les espaces, nous écrirons :</p>
- <pre><code class="language-php">$arabic->trim('\s|\d');</code></pre>
+ premier argument qui doit être une expression régulière. Enfin, son second
+ argument permet de préciser de quel côté nous voulons supprimer les
+ caractères : en début, en fin ou les deux, toujours en utilisant les
+ constantes <code>Hoa\String::BEGINNING</code> et <code>Hoa\String::END</code>.
+ Nous pouvons combiner ces constantes pour exprimer « les deux côtés », ce qui
+ est la valeur par défaut : <code class="language-php">Hoa\String::BEGINNING |
+ Hoa\String::END</code>. Par exemple, pour
+ supprimer tous les nombres et les espaces uniquement à la fin, nous
+ écrirons :</p>
+ <pre><code class="language-php">$arabic->trim('\s|\d', Hoa\String::END);</code></pre>
<p>Nous pouvons également <strong>réduire</strong> la chaîne à une
<strong>sous-chaîne</strong> en précisant la position du premier caractère
puis la taille de la sous-chaîne à la méthode
diff --git a/String.php b/String.php
index 6c05967..8223923 100644
--- a/String.php
+++ b/String.php
@@ -134,6 +134,20 @@ class String implements \ArrayAccess, \Countable, \IteratorAggregate {
const RLO = 0x202e;
/**
+ * Represent the beginning of the string.
+ *
+ * @const int
+ */
+ const BEGINNING = 1;
+
+ /**
+ * Represent the end of the string.
+ *
+ * @const int
+ */
+ const END = 2;
+
+ /**
* Split: non-empty pieces is returned.
*
* @const int
@@ -245,11 +259,11 @@ class String implements \ArrayAccess, \Countable, \IteratorAggregate {
* @access public
* @param int $length Length.
* @param string $piece Piece.
- * @param bool $end Whether we append at the end or the start of
- * the current string.
+ * @param int $side Whether we append at the end or the beginning
+ * of the current string.
* @return \Hoa\String
*/
- public function pad ( $length, $piece, $end = true ) {
+ public function pad ( $length, $piece, $side = self::END ) {
$difference = $length - $this->count();
@@ -263,7 +277,9 @@ class String implements \ArrayAccess, \Countable, \IteratorAggregate {
$handle .= mb_substr($piece, 0, $difference - mb_strlen($handle));
- return true === $end ? $this->append($handle) : $this->prepend($handle);
+ return static::END === $side
+ ? $this->append($handle)
+ : $this->prepend($handle);
}
/**
@@ -448,16 +464,28 @@ class String implements \ArrayAccess, \Countable, \IteratorAggregate {
*
* @access public
* @param string $regex Characters to remove.
+ * @param int $side Whether we trim the beginning, the end or both
+ * sides, of the current string.
* @return \Hoa\String
*/
- public function trim ( $regex = '\s' ) {
+ public function trim ( $regex = '\s', $side = 3 /* static::BEGINNING
+ | static::END */ ) {
- $regex = '(?:' . $regex . ')+';
- $this->_string = preg_replace(
- '#(^' . $regex . ')|(' . $regex . '$)#u',
- '',
- $this->_string
- );
+ $regex = '(?:' . $regex . ')+';
+ $handle = null;
+
+ if(0 !== ($side & static::BEGINNING))
+ $handle .= '(^' . $regex . ')';
+
+ if(0 !== ($side & static::END)) {
+
+ if(null !== $handle)
+ $handle .= '|';
+
+ $handle .= '(' . $regex . '$)';
+ }
+
+ $this->_string = preg_replace('#' . $handle . '#u', '', $this->_string);
$this->_direction = null;
return $this;