2011-01-06 3 views
3

У меня есть функция C#, которая преобразует все неанглийские символы в соответствующие символы для заданного текста. например,Как преобразовать символы, отличные от английского, на английский, используя JavaScript

public static string convertString(string phrase) 
     { 
      int maxLength = 100; 
      string str = phrase.ToLower(); 
      int i = str.IndexOfAny(new char[] { 'ş','ç','ö','ğ','ü','ı'}); 
      //if any non-english charr exists,replace it with proper char 
      if (i > -1) 
      { 
       StringBuilder outPut = new StringBuilder(str); 
       outPut.Replace('ö', 'o'); 
       outPut.Replace('ç', 'c'); 
       outPut.Replace('ş', 's'); 
       outPut.Replace('ı', 'i'); 
       outPut.Replace('ğ', 'g'); 
       outPut.Replace('ü', 'u'); 
       str = outPut.ToString(); 
      } 
      // if there are other invalid chars, convert them into blank spaces 
      str = Regex.Replace(str, @"[^a-z0-9\s-]", ""); 
      // convert multiple spaces and hyphens into one space  
      str = Regex.Replace(str, @"[\s-]+", " ").Trim(); 
      // cut and trim string 
      str = str.Substring(0, str.Length <= maxLength ? str.Length : maxLength).Trim(); 
      // add hyphens 
      str = Regex.Replace(str, @"\s", "-");  
      return str; 
     } 

, но я должен использовать ту же функцию на стороне клиента с javascript. Можно ли перевести функцию выше в js?

+0

Лучшее название может быть: Как конвертировать неанглийские символы на английский язык с помощью JavaScript –

+0

да Крис, вы правы. я изменил его. –

ответ

5

Это должно быть то, что вы ищете - проверьте демоверсию.

function convertString(phrase) 
{ 
    var maxLength = 100; 

    var returnString = phrase.toLowerCase(); 
    //Convert Characters 
    returnString = returnString.replace(/ö/g, 'o'); 
    returnString = returnString.replace(/ç/g, 'c'); 
    returnString = returnString.replace(/ş/g, 's'); 
    returnString = returnString.replace(/ı/g, 'i'); 
    returnString = returnString.replace(/ğ/g, 'g'); 
    returnString = returnString.replace(/ü/g, 'u'); 

    // if there are other invalid chars, convert them into blank spaces 
    returnString = returnString.replace(/[^a-z0-9\s-]/g, ""); 
    // convert multiple spaces and hyphens into one space  
    returnString = returnString.replace(/[\s-]+/g, " "); 
    // trims current string 
    returnString = returnString.replace(/^\s+|\s+$/g,""); 
    // cuts string (if too long) 
    if(returnString.length > maxLength) 
    returnString = returnString.substring(0,maxLength); 
    // add hyphens 
    returnString = returnString.replace(/\s/g, "-"); 

    alert(returnString); 
} 

Current Demo

Edit: Обновление демо добавить для тестирования ввода.

+1

привет rionmonster, спасибо за код. и да он вызывает ошибку как на [returnString = returnString.replace (/ [\ s -] + /, "") .trim();] и [returnString = returnString.substring (0, returnString.length < = MAXLENGTH returnString.Length: MAXLENGTH) .trim();] я думаю, что есть ошибка синтаксиса .. но он дал мне намеки ... –

+0

я изменил «returnString = returnString.substring (0, returnString .length <= maxLength? returnString.Length: maxLength) .trim(); " в утверждение if, поскольку это должно выполнить одно и то же. Вы можете испортить демоверсию, если хотите, поскольку у меня нет тестового ввода для тестирования. Надеюсь это поможет. –

+1

trim() не является встроенной функцией строки JS. – ken

1

Это, конечно, можно преобразовать его ...

ToLower -> toLowerCase, замените => заменить, длина => длина

Вы должны были бы написать код IndexOfAny, но это не большая проблема. Но вот мой вопрос: зачем беспокоиться об этом на стороне клиента? Почему бы не перезвонить на сервер и выполнить код в одном месте? Я так много делаю. Проверьте по следующей ссылке:

http://aspalliance.com/1922

Это объясняет способ связывания, на стороне клиента на стороне сервера методов.

+0

Привет, Крис, спасибо за ваш комментарий и помощь. мой босс не хочет его перезвонить, просто клиентская сторона с js. Я просматриваю документы RegEx, чтобы реализовать его для js .. –

2
function convertString(phrase) 
{ 
var maxLength = 100; 
var str = phrase.toLowerCase(); 
var charMap = { 
    'ö': 'o', 
    'ç': 'c', 
    'ş': 's', 
    'ı': 'i', 
    'ğ': 'g', 
    'ü': 'u' 
}; 

var rx = /(ö|ç|ş|ı|ğ|ü)/g; 

// if any non-english charr exists,replace it with proper char 
if (rx.test(str)) { 
    str = str.replace(rx, function(m, key, index) { 
    return charMap[key]; 
    }); 
} 

// if there are other invalid chars, convert them into blank spaces 
str = str.replace(/[^a-z\d\s-]/gi, ""); 
// convert multiple spaces and hyphens into one space  
str = str.replace(/[\s-]+/g, " "); 
// trim string 
str.replace(/^\s+|\s+$/g, ""); 
// cut string 
str = str.substring(0, str.length <= maxLength ? str.length : maxLength); 
// add hyphens 
str = str.replace(/\s/g, "-"); 

return str; 
} 
+0

привет, спасибо за код. но я получаю «Ошибка выполнения Microsoft JScript: объект не поддерживает это свойство или метод» ошибка на «if (str.test (rx)) {« line. –

+0

К сожалению, извините! Исправленный. – ken

0

Хотя это старый вопрос, это проблема, которую я часто сталкиваюсь. Поэтому я написал учебное пособие о том, как его решить. Он находится здесь: http://nicoschuele.com/Posts/75.html

Короткий ответ таков: во-первых, вам нужно обработать все диакритические символы внутри функции, а затем, используя созданный вами диктанс, вам нужно обработать все буквы, специфичные для языка. Например, «а» является диакритическим характером, а «Ø» является норвежской буквой. Мой учебник использует .NET для достижения этого, но принцип, даже в javascript, тот же.