Xpoint
   [напомнить пароль]

Распознать в MSIE6 non ASCII цифровые символы

2006-01-13 16:48:34 [обр] Григорий [досье]

требуется функция для контроля за вводом цифровых символов в поле веб формы. В случае, если используется однобайтная кодировка каждого знака - (английский, немецкий, русский, венгерский..) я использую регулярное выражение для чисел:

function checkExpression(str) {
  var re = /^\d+$/;
  return str.match(re) != null;
};

А как быть, если, например, включена японская раскладка клавиатуры (utf 16), где символу "0" соответствует код \uFF10 ? Функция, указанная выше, всегда возвращает false. Это происходит вне зависимости от разновидности кодировки документа: будь то UTF-8, или UTF-16

Майкрософт ничего не сообщает о принадлежности таких чисел к \d:
http://msdn.microsoft.com/libr......037-45ed-aa23-706f58358c0e.asp

следовательно, как я понимаю, у меня есть только один шанс: перечисляя все допустимые коды составить список возможных значений, корейский - одно, японский - другое.. и тд, используя регэксп \uXXXX. Громоздко и не красиво....

Такое я наблюдаю только в MSIE, Mozilla (FF1.5) работает хорошо.

смущает так же второе, в случае выше знаки FF10..FF19 не являются цифровыми для JScript (но являются таковыми для других языков, например в Sun JDK1.5). Вот тест, возвращающий Not A Number всегда :

parseInt("\uFF11", 10);

кстати, NaN возвращается и в случае с Мозиллой (FF1.5 Win32).


Я копаю в другую сторону и вещи намного проще? Как мне поступить?

спустя 20 минут [обр] Владимир Палант [досье]
Откройте charmap, посмотрите какой-нибудь Unicode-шрифт. Нет десяти наборов цифр, есть только два — нормальный и "fullwidth" (FF10-FF19). Если вас это заботит, то можете просто заменить все цифры на "нормальные":
str = str.replace(/[\uFF10-\uFF19]/, function(digit) {
  return String.fromCharCode(digit.charCodeAt(0) - 0xFEE0);
});
спустя 1 минуту [обр] Владимир Палант [досье]
PS: Кодировка страницы ни на что не влияет, браузер сразу преобразует все в Unicode и JavaScript работает уже только с ним.
спустя 1 час 5 минут [обр] Григорий [досье]

я не очень хорошо ориентируюсь в цифрах папуасов (вместе с тем хочется предусмотреть сразу все :), и возможно, что многое из того, что есть, например, здесь http://www.fileformat.info/info/unicode/category/Nd/list.htm никогда не понадобится. В приведенной ссылке наборов цифр - много, а не только нормальный и fullwidth...

в целом идея понятна, из полученного кода символа поочередно вычитаем значения из стандартного ряда [N1, N2, N3 ..] до тех пор, пока результат не станет принадлежать диапазону ascii 0..9.

Владимир, Большое Спасибо.

Powered by POEM™ Engine Copyright © 2002-2005