Массив по нескольким разделителям.
Прошу помощи ! Необходимо переделать следующий код (или дайте совет как это осуществить):
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 () объединить по тем же самым разделителям. Код надо изменить так, чтобы результат был следующий: исходная строка - петров-сикорский юсуп маратович оглы, результат выполнения кода Петров-Сикорский Юсуп Маратович оглы. Я в программировании первоклассник, данный код сваять получилось, а вот дальше проблема. Наверное вопрос решаем с помощью регулярных выражений, но я с ними практически не знаком. Прошу помощи. Всем спасибо. |
(" " + "петров-сикорский юсуп маратович оглы").replace(/\s./g, function(entry) {return entry.toUpperCase()}).substr(1); http://javascript.ru/basic/regular-expression |
Пробую в песочнице вот так;
alert(" " + "петров-сикорский юсуп маратович оглы").replace(/\s./g, function(entry) {return entry.toUpperCase()}).substr(1); В результате получаю петров-сикорский юсуп маратович оглы. Что-то вроде не работает? Что делаю неправильно? |
Да. Ты сперва вывел (" " + "петров-сикорский юсуп маратович оглы"), а затем к возвращенному результату (undefined) применил методы replace и substr (получив ошибку). Надо в скобки все выражение обернуть:
alert((" " + "петров-сикорский юсуп маратович оглы").replace(/\s./g, function(entry) {return entry.toUpperCase()}).substr(1)) |
Огромное спасибо. То что надо. Все же мир не без добрых людей.
|
alert( "петров-сикорский юсуп маратович оглы".replace(/([\s-']|^)\S/g, function(entry) {return entry.toUpperCase()}) ) |
Цитата:
alert(("петров-сикорский юсуп маратович оглы").split(' ').map(function(a,i) { return i > 2 ? a : a.replace(/([а-яё])([а-яё]+)/gi, function (a, b, c){return b.toUpperCase()+c})}).join(' ')) |
На самом деле тут следует использовать лингвистическую библиотеку. Нюансов больно много чтоб изобретать велосипед.
|
Это я собираюсь использовать только в личных целях. Меня пока все устраивает. По форумам искал что-то подобное так не нашел. Надо разобраться с этими регулярными выражениями. Еще раз спасибо.
|
У РОНИ ответ, на поставленный вопрос, верный, а у 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 = ""; } Хотелось бы чтобы скрипт РОНИ работал по этому же принципу. Помогите простому пользователю, если несложно. Всем спасибо. |
Часовой пояс GMT +3, время: 22:14. |