summaryrefslogtreecommitdiff
path: root/include/utf8/strcspn.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/utf8/strcspn.php')
-rw-r--r--include/utf8/strcspn.php36
1 files changed, 36 insertions, 0 deletions
diff --git a/include/utf8/strcspn.php b/include/utf8/strcspn.php
new file mode 100644
index 0000000..b05e327
--- /dev/null
+++ b/include/utf8/strcspn.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+* @version $Id: strcspn.php,v 1.1 2006/02/25 13:50:17 harryf Exp $
+* @package utf8
+* @subpackage strings
+*/
+
+/**
+* UTF-8 aware alternative to strcspn
+* Find length of initial segment not matching mask
+* Note: requires utf8_strlen and utf8_substr (if start, length are used)
+* @param string
+* @return int
+* @see http://www.php.net/strcspn
+* @see utf8_strlen
+* @package utf8
+* @subpackage strings
+*/
+function utf8_strcspn($str, $mask, $start=null, $length=null)
+{
+ if (empty($mask) || strlen($mask) == 0)
+ return null;
+
+ $mask = preg_replace('!([\\\\\\-\\]\\[/^])!','\\\${1}', $mask);
+
+ if (!is_null($start) || !is_null($length))
+ $str = utf8_substr($str, $start, $length);
+
+ preg_match('/^[^'.$mask.']+/u', $str, $matches);
+
+ if (isset($matches[0]))
+ return utf8_strlen($matches[0]);
+
+ return 0;
+}