2014-09-06 3 views
4

Обычно для генерации url slug я использую библиотеку https://github.com/jprichardson/string.js - и точно slugify метод. Однако он удаляет все китайские символы. В качестве обходного пути я использую следующие функции:Как сгенерировать URL-адрес из китайских символов?

var slugify = function(str){ 
    str = str.replace(/\s+/g,'-') // replace spaces with dashes 
    str = encodeURIComponent(str) // encode (it encodes chinese characters) 
    return str 
} 

Таким образом, для ввода 中文 标题 я получаю %E4%B8%AD%E6%96%87-%E6%A0%87%E9%A2%98 и это выглядит в веб-браузере ввода URL поле (и работает):

http://example.com/中文-标题 

Однако я хочу также удалить любые специальные символы, такие как [email protected]#$%^&*) и т.д. проблема заключается в том, что string.js библиотека использует следующий фрагмент кода внутренне:

.replace(/[^\w\s-]/g 

И это удаляет любые специальные символы, но и удаляет китайские символы, как они не совпадают с регулярным выражением \w ...

Так что мой вопрос - как изменить выше регулярное выражение так сделать его держать китайские иероглифы?


Я попытался

replace(/[^a-zA-Z0-9_\s-\u3400-\u9FBF]/g,'') 

Но он по-прежнему заменяет китайские иероглифы ...

ответ

2

Если вы хотите совместить (или исключить) символ штриховки - в виде набора символов (с квадратными скобками), вы должны положить его в конец.

Ваше регулярное выражение соответствует символам, которые не

  • в диапазоне a-z
  • в диапазоне A-Z
  • в диапазоне 0-9
  • _
  • в диапазоне \s-\u3400, что ваша проблема
  • -
  • \u9FBF

Вы хотите сделать:

replace(/[^a-zA-Z0-9_\u3400-\u9FBF\s-]/g,'') 
+0

Спасибо это работает сейчас :) – user606521

0

сделать положительный список соответствия:

replace(/[\[email protected]#\$%^&\*\)]/g,'') 

Во всяком случае, я считал бы взять URL мета из них:

replace(/[\[email protected]\$\^\*\)]/g,'') 
Смежные вопросы