Javascript: выдает ошибку, когда китайские символы в имени файла - PullRequest
0 голосов
/ 25 июня 2018

Привет Я хотел бы выдать ошибку, когда я вижу китайские символы в имени файла, используя Javascript.Мой код выдает ошибку «Ожидаемая шестнадцатеричная цифра».Пока у меня есть следующий код:

if(document.f1.Attachment.value.match(""/[\u4e00-\u9fff]|[\u3400-\u4dbf]|[\u{20000}-\u{2a6df}]|[\u{2a700}-\u{2b73f}]|[\u{2b740}-\u{2b81f}]|[\u{2b820}-\u{2ceaf}]|[\uf900-\ufaff]|[\u3300-\u33ff]|[\ufe30-\ufe4f]|[\uf900-\ufaff]|[\u{2f800}-\u{2fa1f}]""))
{
alert('Attachment cannot contain Chinese characters');
}

Я читал и понял, что это из-за \ u, но я не понимаю, как я мог это исправить.

1 Ответ

0 голосов
/ 25 июня 2018

Прежде всего, вы должны удалить "" с обоих концов литерала регулярного выражения.В JS вам нужно использовать обычный /.../ без " или ', обертывающий конструкцию, чтобы он работал должным образом, чтобы быть проанализированным как регулярное выражение.

Далее ваш шаблон содержит \u{XXXXX}система обозначений, соответствующая стандарту ECMAScript 6+ и требующая применения модификатора u в совместимой среде JS.Итак, в ES6 это правильное решение:

.match(/[\u4e00-\u9fff]|[\u3400-\u4dbf]|[\u{20000}-\u{2a6df}]|[\u{2a700}-\u{2b73f}]|[\u{2b740}-\u{2b81f}]|[\u{2b820}-\u{2ceaf}]|[\uf900-\ufaff]|[\u3300-\u33ff]|[\ufe30-\ufe4f]|[\uf900-\ufaff]|[\u{2f800}-\u{2fa1f}]/u)

Чтобы оно работало в старых браузерах ES5, вам необходимо транспорт регулярное выражение :

.match(/[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff]|(?:[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD87E[\uDC00-\uDE1F])/)

Демонстрация JS ES5:

if("中文".match(/[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff]|(?:[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD87E[\uDC00-\uDE1F])/)) {
  console.log("ES5: Chinese detected!");
}

JS ES6 демо:

if("中文".match(/[\u4e00-\u9fff]|[\u3400-\u4dbf]|[\u{20000}-\u{2a6df}]|[\u{2a700}-\u{2b73f}]|[\u{2b740}-\u{2b81f}]|[\u{2b820}-\u{2ceaf}]|[\uf900-\ufaff]|[\u3300-\u33ff]|[\ufe30-\ufe4f]|[\uf900-\ufaff]|[\u{2f800}-\u{2fa1f}]/u)) {
  console.log("ES6: Chinese detected!");
}

Этот последний дает Неверный диапазон в наборе символов Ошибка в IE, поскольку он не поддерживает ES6.

...