Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2014, 16:54
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Массив по нескольким разделителям.
Прошу помощи ! Необходимо переделать следующий код (или дайте совет как это осуществить):
var str = rawValue;
var FIO =str.split (' ');
var a = FIO.length
switch (a) {
 case 2:{
    FIO [0] = FIO [0].charAt (0).toUpperCase () + FIO [0].substr (1);
    FIO [1] = FIO [1].charAt (0).toUpperCase () + FIO [1].substr (1);
  rawValue = FIO.join (' ');
    FIO [0] = FIO [0].charAt (0) + FIO [0].substr (1);
    FIO [1] = FIO [1].charAt (0) + FIO [1].substr (1);
 this.resolveNode("PervBolshie").rawValue = FIO.join (' ');
       break;
 } 
     case 3:{
        FIO [0] = FIO [0].charAt (0).toUpperCase () + FIO [0].substr (1);
        FIO [1] = FIO [1].charAt (0).toUpperCase () + FIO [1].substr (1); 
        FIO [2] = FIO [2].charAt (0).toUpperCase () + FIO [2].substr (1); 
   rawValue = FIO.join (' '); 
        FIO [0] = FIO [0].charAt (0) + FIO [0].substr(1);
        FIO [1] = FIO [1].charAt (0)+ FIO [1].substr (1);
        FIO [2] = FIO [2].charAt (0)+ FIO [2].substr (1);
   this.resolveNode("PervBolshie").rawValue = FIO.join (' '); 
        break;
}
  default:
    rawValue = str;   
   this.resolveNode("PervBolshie").rawValue = str;
 }

в результате выполнения кода - первые буквы первых трех слов становятся Заглавные.
split () вроде бы не дает возможности разбить строку по нескольким разделителям, а join () объединить по тем же самым разделителям.

Код надо изменить так, чтобы результат был следующий: исходная строка - петров-сикорский юсуп маратович оглы,
результат выполнения кода Петров-Сикорский Юсуп Маратович оглы.

Я в программировании первоклассник, данный код сваять получилось, а вот дальше проблема. Наверное вопрос решаем с помощью регулярных выражений, но я с ними практически не знаком. Прошу помощи. Всем спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2014, 17:35
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

(" " + "петров-сикорский юсуп маратович оглы").replace(/\s./g, function(entry) {return entry.toUpperCase()}).substr(1);

http://javascript.ru/basic/regular-expression
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2014, 19:06
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Пробую в песочнице вот так;
alert(" " + "петров-сикорский юсуп маратович оглы").replace(/\s./g, function(entry) {return entry.toUpperCase()}).substr(1);
В результате получаю петров-сикорский юсуп маратович оглы.
Что-то вроде не работает? Что делаю неправильно?
Ответить с цитированием
  #4 (permalink)  
Старый 06.10.2014, 19:27
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Да. Ты сперва вывел (" " + "петров-сикорский юсуп маратович оглы"), а затем к возвращенному результату (undefined) применил методы replace и substr (получив ошибку). Надо в скобки все выражение обернуть:
alert((" " + "петров-сикорский юсуп маратович оглы").replace(/\s./g, function(entry) {return entry.toUpperCase()}).substr(1))
Ответить с цитированием
  #5 (permalink)  
Старый 06.10.2014, 19:33
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Огромное спасибо. То что надо. Все же мир не без добрых людей.
Ответить с цитированием
  #6 (permalink)  
Старый 06.10.2014, 19:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

alert(
  "петров-сикорский юсуп маратович оглы".replace(/([\s-']|^)\S/g, function(entry) {return entry.toUpperCase()})
)
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 06.10.2014, 20:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от BSI
результат выполнения кода Петров-Сикорский Юсуп Маратович оглы.

alert(("петров-сикорский юсуп маратович оглы").split(' ').map(function(a,i) { return i > 2 ? a : a.replace(/([а-яё])([а-яё]+)/gi, function (a, b, c){return b.toUpperCase()+c})}).join(' '))
Ответить с цитированием
  #8 (permalink)  
Старый 06.10.2014, 20:37
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

На самом деле тут следует использовать лингвистическую библиотеку. Нюансов больно много чтоб изобретать велосипед.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 06.10.2014, 22:21
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Это я собираюсь использовать только в личных целях. Меня пока все устраивает. По форумам искал что-то подобное так не нашел. Надо разобраться с этими регулярными выражениями. Еще раз спасибо.

Последний раз редактировалось BSI, 08.10.2014 в 16:15.
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2014, 10:59
III III вне форума
Аспирант
Отправить личное сообщение для III Посмотреть профиль Найти все сообщения от III
 
Регистрация: 08.10.2014
Сообщений: 80

У РОНИ ответ, на поставленный вопрос, верный, а у Aetae в верхний регистр переводятся первые буквы всех слов, что несколько не соответствует поставленному требованию.
Я не спец в этих вопросах, но мне также необходимо решить данную задачу, но несколько в другом ключе. Данный скрипт
this.rawValue=(("rawValue).split(' ').map(function(a,i) { return i > 2 ? a : a.replace(/([а-яё])([а-яё]+)/gi, function (a, b, c){return b.toUpperCase()+c})}).join(' '))
работает при потери полем фокуса. Как бы тоже самое сделать в момент ввода текста в поле?
Делал форму в LiveCycle Designer, в поле ввод всего текста производится в нижнем регистре и текст отображается в поле сразу в верхнем регистре. Осуществлялось это функцией:
function VerchReg(newsymbol) 
{
	var re = /[0-9А-Яа-я\-\s]/;//Разрешен ввод только цифр,кириллицы,знака переноса и пробела
	if (re.test(newsymbol))
	{
		return newsymbol.toUpperCase();
	}
	else 
	{
		return "";
	} 	
}

и ее вызовом
form1.#subform[0].Серия_полиса::change - (JavaScript, client)
if (xfa.event.newText.length > xfa.event.prevText.length && xfa.event.change.length == 1)
{
 	xfa.event.change = xfa.form.form1.variables.Validation.VerchReg(xfa.event.change);
}
else
{
	xfa.event.change = "";
}

Хотелось бы чтобы скрипт РОНИ работал по этому же принципу.
Помогите простому пользователю, если несложно.
Всем спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в шаблоне диррективы узнать массив это или строка? delias Angular.js 1 18.03.2014 07:33
Отправить, когда четко соберется массив vas88811 Events/DOM/Window 11 26.02.2014 21:55
Массив объектов doox911 Библиотеки/Тулкиты/Фреймворки 6 16.01.2014 22:36
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30