Re: RegEx to check for non-Latin characters
| From: | Yeti | Date: | Sat, 15 Nov 2008 09:21:01 +0000 |
| Subject: | Re: RegEx to check for non-Latin characters | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-283320@lists.php.net to get a copy of this message | ||
Hi Behzad,
I would try a different approach ...
EXAMPLE (UTF-8):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Persia</title>
</head>
<body>
<?php
$username = '1aﺠﺟﺝﭻﭽﭼﭺ2b;
$encoding = 'utf-8';
$username = mbStringToArray($username, $encoding);
foreach($username as $char) {
if (strlen($char) == 1) echo $char.' is not a multibyte character<br />';
}
function mbStringToArray ($string, $encoding) {
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,0,1,$encoding);
$string = mb_substr($string,1,$strlen,$encoding);
$strlen = mb_strlen($string);
}
return $array;
}
?>
</body>
</html>
As you can see I'm using the multibyte string functions [1] and split
$username into a character by character array.
Then I use strlen() for which an UTF-8 char has a length > 1. Note:
This might change with PHP6.
It also does not check for Persian characters only yet. You would have
to try something like this ...
EXAMPLE (UTF-8):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Persia</title>
</head>
<body>
<?php
$username = '1aﺠﺟﺝﭻﭽﭼﭺ2b';
$encoding = 'utf-8';
$chars =
'ﺐﺒﺑﺏﭗﭙﭙپﺖﺘﺗﺕﺚﺜﺛﺙﺞﺠﺟﺝﭻﭽﭼﭺﺢﺤﺣﺡﺦﺨﺧﺥﺪﺪﺩﺩﺬﺬﺫﺫﺮﺮﺭﺭﺰﺰﺯﺯﮋﮋژژﺲﺴﺳﺱﺶﺸﺷﺵﺺﺼﺻﺹﺾﻀﺿﺽﻂﻄﻃﻁﻆﻈﻇﻅﻊﻌﻋﻉﻎﻐﻏﻍﻒﻔﻓﻑﻖﻘﻗﻕﮏﮑﮐکﮓﮕﮔگﻞﻠﻟﻝﻢﻤﻣﻡﻦﻨﻧﻥﻮﻮووﻪﻬﻫﻩﯽﻴﻳﻯ';
$username = mbStringToArray($username, $encoding);
foreach($username as $char) {
if (strlen($char) == 1) echo $char.' is not a multibyte character<br />';
if (mb_strpos($chars, $char, 0, $encoding) !== false) echo $char.' is
a Persian character<br />';
}
function mbStringToArray ($string, $encoding) {
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,0,1,$encoding);
$string = mb_substr($string,1,$strlen,$encoding);
$strlen = mb_strlen($string);
}
return $array;
}
?>
</body>
</html>
[1] http://in.php.net/manual/en/ref.mbstring.php
[2] http://in.php.net/manual/en/function.strlen.php