我有一个波斯语网站。我网站用户的键盘通常使用波斯语(或阿拉伯语)。因此,有时他们的密码不会匹配。
我有一个用于其用户名(手机号码)的功能,该功能可将波斯/阿拉伯数字转换为英语:
function convert_digits_to_en($entry){
$fmt = numfmt_create('fa', NumberFormatter::DECIMAL);
return numfmt_parse($fmt, $entry);
}
如果条目包含所有数字,它将起作用。
即۰۹۱۲۳۵۶۵۴۹۸
也将转换为09123565498
。
问题是当条目同时包含字符和数字(例如密码)时。即test۰۹۱۲
。我需要将其转换为test0912
。我当前的函数为此条目返回一个empty string。知道怎么解决吗?
答案 0 :(得分:2)
我在laravel中使用正则表达式搜索了很多验证波斯字符的波斯电话号码,例如 ۱۲۳۴ 但没有找到合适的答案,所以我决定将peisan号码更改为英语并在我自己验证,这对我帮助很大,希望这会有所帮助:
if (is_numeric($mobile) && strlen($mobile) == 11) {
// if number in english
}else{
$mobile = str_split($mobile , 2);
if (count($mobile) != 11) {
return redirect()->back()->withErrors('فرمت شماره موبایل باید عدد و ۱۱ رقم باشد');
}
foreach ($mobile as $key => $number) {
if ($number == '۰') {
$mobile[$key] = 0;
}elseif ($number == '۱') {
$mobile[$key] = 1;
}elseif ($number == '۲') {
$mobile[$key] = 2;
}elseif ($number == '۳') {
$mobile[$key] = 3;
}elseif ($number == '۴') {
$mobile[$key] = 4;
}elseif ($number == '۵') {
$mobile[$key] = 5;
}elseif ($number == '۶') {
$mobile[$key] = 6;
}elseif ($number == '۷') {
$mobile[$key] = 7;
}elseif ($number == '۸') {
$mobile[$key] = 8;
}elseif ($number == '۹') {
$mobile[$key] = 9;
}
}
$mobile = implode($mobile);
if(is_numeric($mobile) == false){
return redirect()->back()->withErrors('فرمت شماره موبایل باید عدد و ۱۱ رقم باشد');
}
}
答案 1 :(得分:0)
一个非正则表达式的解决方案是这样的:
function convert_digits_to_en($input)
{
$arabic = ['۰' => 0, '۱' => 1];
return strtr($input, $arabic);
}
echo convert_digits_to_en('test۱۰۰'); // test100
注意:您需要将数字添加到该数组中,我的波斯语/阿拉伯语不太好。
实时示例
阅读材料
答案 2 :(得分:0)
您可以将您的字符串用作数组并像这样迭代它们:
function convert_digits_to_en($entry){
$result = '';
$fmt = numfmt_create('fa', NumberFormatter::DECIMAL);
foreach((array)$entry as $value){
$transform_digit = numfmt_parse($fmt, $value);;
$result = empty($transform_digit) ? $value : $transform_digit;
}
return $result;
}