Как приблизить Java Character.isLetterOrDigit () для определения неанглийских букв, цифр в Javascript? - PullRequest
6 голосов
/ 04 сентября 2010

В Javascript, есть ли способ (который выживает интернационализации), чтобы определить, является ли символ буквой или цифрой?Это правильно идентифицирует Ä, ç как буквы и неанглийские цифры (которые я не буду рассматривать в качестве примеров)!

В Java класс Character имеет несколько статических методов .isLetter (),.isDigit (), .isLetterOrDigit (), для определения международным способом, что символ на самом деле является буквой или цифрой.Это лучше, чем код типа

//this is not right, but common and easy
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) { //it's a letter

, потому что он будет подбирать неанглийские буквы.Я думаю, что C # имеет аналогичные возможности ...

Конечно, в худшем случае я могу отправить строки обратно на сервер для проверки, но это неприятно ...

Конечно, в концеЯ ищу, чтобы проверить, является ли ввод действительным именем (начинается с буквы, остальные буквы или цифры).Нестандартная возможность для малого объема использования может быть:

var validName=function(atr) {
    var ele=document.createElement("div");
    try { ele.setAttribute(atr,"xxx"); }
    catch(e) { return false; }
    return true;
    }

Это достаточно неплохо для IE, FF и Chrome ... Хотя для выяснения ситуации может потребоваться тщательное тестированиенасколько последовательны ответы.И снова, не подходит для интенсивного использования из-за создания элементов.

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

Я создал небольшую утилиту Javascript для обеспечения этой функциональности. Я не утверждаю, что это идеально, поэтому дайте мне знать, как вы справедливы. Если людям это нравится, я сделаю это официальным ответом на этот вопрос.

CharFunk: https://github.com/joelarson4/CharFunk

  • CharFunk.getDirectionality (ch) - используется для определения направленности персонажа
  • CharFunk.isAllLettersOrDigits (string) - возвращает true, если строковый аргумент состоит из всех букв и цифр
  • CharFunk.isDigit (ch) - возвращает true, если предоставлена ​​строка длиной 1, которая является цифрой
  • CharFunk.isLetter (ch) - возвращает true, если предоставлена ​​строка длиной 1, которая является буквой
  • CharFunk.isLetterNumber (ch) - Возвращает true, если предоставляется строка длиной 1, которая находится в категории Unicode "Nl"
  • CharFunk.isLetterOrDigit (ch) - возвращает true, если задана строка длиной 1, которая является буквой или цифрой
  • CharFunk.isLowerCase (ch) - возвращает true, если задана строчная строка длиной 1
  • CharFunk.isMirrored (ch) - возвращает true, если предоставлена ​​строка длиной 1, которая является зеркальным символом
  • CharFunk.isUpperCase (ch) - возвращает true, если указана строка длиной 1 в верхнем регистре
  • CharFunk.isValidFirstForName (ch) - возвращает true, если указана строка длиной 1, которая является допустимым начальным символом для идентификатора JavaScript
  • CharFunk.isValidMidForName (ch) - возвращает true, если предоставляется строка длиной 1, которая является допустимым не ведущим символом для идентификатора ECMAScript
  • CharFunk.isValidName (string, checkReserved) - возвращает true, если строка является допустимым идентификатором ECMAScript
  • CharFunk.isWhitespace (ch) - возвращает true, если предоставлена ​​строка длиной 1, которая является символом пробела
  • CharFunk.indexOf (string, callback) - возвращает первый соответствующий индекс, который возвращает истинный результат обратного вызова
  • CharFunk.lastIndexOf (string, callback) - возвращает последний соответствующий индекс, который возвращает истинный результат обратного вызова
  • CharFunk.matchesAll (string, callback) - возвращает true, если все символы в предоставленной строке приводят к истинному возвращению из обратного вызова
  • CharFunk.replaceMatches (string, callback, ch) - возвращает новую строку со всеми замененными символами
1 голос
/ 06 сентября 2010

Насколько я могу судить, столкнувшись с подобной проблемой, единственным способом было выбрать пару блоков и предположить, что это буквы. Стандарт Unicode имеет полные списки, так что вы можете создать полное регулярное выражение для этого (я думаю). Например, если вы берете все «буквенные» символы в соответствии с этим списком , у вас, вероятно, есть все буквенные символы. Аналогично для числовых (десятичных, цифр, числовых) в основном файле данных Unicode .

Я не совсем уверен, указываю ли я в правильном направлении. Существует множество диаграмм кодов Unicode , которые могут помочь, и, конечно же, существует стандарт Unicode . Хотя читать и понимать все это очень сложно, особенно если ваша единственная цель - выполнить некоторую проверку строки javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...