رفتن به مطلب

کد تشخیص زبان فارسی از انگلیسی


پست های پیشنهاد شده

من یه تابع یا کدی میخوام که بتونه تشخیص بده متن وارد شده در زمینه دلخواه کاراکتر انگلیسی هستش یا فارسی

لینک به ارسال

سلام

از جاوا میتونین استفاده کنید.

نمونه کدی که خودم استفاده میکنم »


String.prototype.toFaDigit = function() {
return this.replace(/\d+/g, function(digit) {
var ret = '';
for (var i = 0, len = digit.length; i < len; i++) {
ret += String.fromCharCode(digit.charCodeAt(i) + 1728);
}
return ret;
});
};

String.prototype.toEnDigit = function() {
return this.replace(/[\u06F0-\u06F9]+/g, function(digit) {
var ret = '';
for (var i = 0, len = digit.length; i < len; i++) {
ret += String.fromCharCode(digit.charCodeAt(i) - 1728);
}

return ret;
});
};
function processEnter(input)
{
var enterCount = 0;
for (var i = 0; i < input.length; i++)
{
if (input.charCodeAt(i) == 10)
{
enterCount ++;
}
}
return enterCount;
}
function isEnglishString(input )
{
if (input == '')
{
return true;
}

for (var i = 0; i < input.length; i++)
{
if (input.charCodeAt(i) > 127)
{
return false;
}
}
return true;
}

function updateLengthAndMessageCount2(MainTextFieldName, messageLengthFieldName, messageCountFieldName, fieldmobileCount)
{
var fieldObj = document.getElementById(MainTextFieldName);
var messageLengthField = document.getElementById(messageLengthFieldName);
var messageCountField = document.getElementById(messageCountFieldName);
var messageContent1 = fieldObj.value;
var messageContent = messageContent1.replace(/(\r\n|\r|\n)/g, ' ');

var enterCount = processEnter(messageContent);
var browserName = navigator.appName;
var messageLength = messageContent.length + fieldmobileCount;

if (browserName != 'Netscape')
{

messageLength = messageLength - enterCount;
}
var RemainLength = 0;
var maxMessageCount = 5;
var maxEnglishLength = 160;
var maxPersianLength = 70;
var maxLongEnglishLength = 153;
var maxLongPersianLength = 66;
var isEnMessage = isEnglishString(messageContent);

var maxMessageLength = isEnMessage ? (maxMessageCount * maxLongEnglishLength) : (maxMessageCount * maxLongPersianLength);
fieldObj.MaxLength = maxMessageLength;
var messageCount = 1;
if (isEnMessage && messageLength > maxEnglishLength)
{
messageCount = messageLength > maxMessageLength ?
maxMessageCount : parseInt(messageLength % maxLongEnglishLength) == 0 ?
parseInt(messageLength / maxLongEnglishLength) :
parseInt(messageLength / maxLongEnglishLength) + 1;
}

if (!isEnMessage && messageLength > maxPersianLength)
{
messageCount = messageLength > maxMessageLength ?
maxMessageCount : parseInt(messageLength % maxLongPersianLength) == 0 ?
parseInt(messageLength / maxLongPersianLength) :
parseInt(messageLength / maxLongPersianLength) + 1;
}

if (messageCount == 1)
{
RemainLength = isEnMessage ? parseInt(maxEnglishLength - messageLength) : parseInt( maxPersianLength - messageLength)

}
else
{
RemainLength = isEnMessage ? parseInt(messageCount * maxLongEnglishLength - messageLength) : parseInt( messageCount * maxLongPersianLength - messageLength)

}
messageLengthField.value = RemainLength;
messageCountField.value = messageCount;
ChekNumLang(MainTextFieldName);
}
function ChekNumLang(MainTextFieldName) {
var fieldObj = document.getElementById(MainTextFieldName);
if (document.getElementById("FarsiNum").checked) {
fieldObj.value = fieldObj.value.toFaDigit();

}
}
function ChekNumLang_ChekBox(MainTextFieldName) {
var fieldObj = document.getElementById(MainTextFieldName);
if (document.getElementById("FarsiNum").checked) {
fieldObj.value = fieldObj.value.toFaDigit();
}
else {
fieldObj.value = fieldObj.value.toEnDigit();
}
}

لینک به ارسال

ممنون از شما دوست عزیز لطف کردید

ولی دوستان اگه کد بهتری سراغ دارن لطف معرفی کننند

لینک به ارسال

فقط یه سوال

این کد چه مشکلی داره که فقط قسمت else داره جواب میده


<?php if (preg_match("/^[a-zA-Z0-9]+$/", $clog)) { ?>
<div dir="ltr">
<?php echo nl2br($clog); ?>
</div>
<?php } else { ?>
<div dir="rtl">
<?php echo nl2br($clog); ?>
</div>
<?php }?>

لینک به ارسال

خیلی برام عجیبه هرچی نیگا میندازم هیچ ایرادی نمیبینم!!!! ممنونمیشم راهنمایی کنید

لینک به ارسال

ورودی چی هست؟

نمونه زیر بدرستی به ازای هر متن جواب میده


$test_string = "parsi";
$test_string = "پارسی";
if(preg_match('/^[a-zA-Z0-9]+$/',$test_string)) {
echo 'EN';
}else{
echo 'ELSE';
}

لینک به ارسال

به حروف اضافه شون کنید همونطوری که اعداد و حروف معرفی شده اند

برای استفاده از این کد هیچ کارکتری نباید غیر از حروف انگلیسی یا اعدادش باشه و الا پاسخ منفی می ده

اگر از زمینه دلخواه می خوای استفاده کنی می تونی دو زمینه بسازی و در قالب زمینه اول را چپ چین و دومی را راستچین کنی که خیالت راحت شه

لینک به ارسال

من هنوز دارم از کد قبلی خودم که چند پست بالاتر گذاشتم استفاده میکنم

و محتوای رمینه من اینه:


Keyboard controls can now be used in touch control mode

دلیل چیه که جواب نمیگیرم؟

آیا اسپیس هم اینجا باعث دردسر میشه؟

لینک به ارسال

دستور رو چطوری بکار بردید؟

اینو باید داخل ' در شرط قبلی قرار دهید

لینک به ارسال

قبل


if (preg_match("/^[a-zA-Z0-9]+$/", $clog))

بعد


if (preg_match("/^[a-zA-Z0-9$-/:-?{-~!"^_`\[\] ]+$/", $clog))

لینک به ارسال

:)


<?php

$test_string = "Keyboard controls can now be used in touch control mode";
//$test_string = "پارسی";
if (preg_match("/^[a-zA-Z0-9$-\/:-?{-~!\"^_`\[\] ]+$/", $test_string)){
echo 'EN';
}else{
echo 'ELSE';
}
?>

لینک به ارسال

کد شما به درستی کار میکنه

حالا چرا وقتی این متن بزارم else میده


Rise and swine! It's a beautiful morning, but the Bad Piggies have just one thing on their mind: FOOD! Use two ALL NEW gadgets in these 15 NEW LEVELS to track down some elusive chocolate cake!
15 new sun-drenched levels!
Climb walls with the new suction cup gadget!
Punch your way to victory with the new spring-loaded Boxing Glove!
Go crazy in an all-new sandbox!

آیا ممکنه بخاطر اینتر موجود در کل متن هست؟

خب با یه تست کوچیک فهمیدم که بخاطر اینتر هستش آیا واسش راه حلی هست؟

لینک به ارسال

خب مشکل اینتر هم حل شد

فقط یه چیز عجیب مونده چرا وقتی استرینگ به صورت دستی وارد کنیم جواب درست میده و وقتی از زمینه میگیره اشتباه

و هم متن دستی و هم متن زمینه یکی است

لینک به ارسال

یاففففففففففتم مشکل را

ببینید آقا پارسا ما وقتی متن بصورت دستی وارد کنیم یعنی:


$string="تست
اینتر"

رشته بصورت خودکار اینتر تشخیص میده و مشکلی نیست اگه متن اینتر هم داشته باشه حله

ولی وقتی میخواد از زمینه بخونه حتی اگه در متن زمینه اینتر زده باشم موقه چاپ مقدار زمینه اگه دقت کرده باشد اینتر نادیده میگیره و همین قضیه الان واسه من مشکل ساز شده

چون طبق تست من الان اگه متن زمینه بدون اینتر باشه به درستی جواب میگیرم ولی اگه اینتر اشته باشه جواب نمیگره و else نشون میده

لینک به ارسال

شما باید در ورودی که بصورت رشته وارد میکنید برای هر /n به br تبدیلش کنید

لینک به ارسال

دقیقا منظور شما چیه؟ یعنی به br تبدیل کنم و بعد کاراکتر br تعریف کنم؟

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...