Массив по нескольким разделителям.
Прошу помощи ! Необходимо переделать следующий код (или дайте совет как это осуществить):
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 = ""; } Хотелось бы чтобы скрипт РОНИ работал по этому же принципу. Помогите простому пользователю, если несложно. Всем спасибо. |
III,
а change заменить на input не пробовали? |
Если input рассматривать как событие, то в LiveCycle Designer я такого не нашел, события в LiveCycle Designer следующие: change, initialize, enter, exit, calculate, validate, validationState, mouseEnter, mouseExit, full, mouseUp, mouseDown, click, preSave, postSave, prePrint, preSubmit, postSubmit, docReady, docClose, ready:form, ready:layout. Или я что-то не в ту степь? Я же не программист, а интересующийся пользователь ПК. Делаю для своего пользования формы в LiveCycle Designer. Как делаются разнообразные формы, в том числе и динамические, я усвоил, а вот с написанием кода пока проблемы, пытаюсь освоить JS.
|
|
LiveCycle Designer это дополнение к Adobe Acrobat для разработки форм. Формы там строятся на основе языка разметки XML и JS, но по этим языкам я имею поверхостные знания.
|
А как это же
alert(("петров-сикорский юсуп маратович оглы").split(' ').map(function(a,i) { return i > 2 ? a : a.replace(/([а-яё])([а-яё]+)/gi, function (a, b, c){return b.toUpperCase()+c})}).join(' '))изобразить в input ? Я пробовал, что-то у меня не получилось. Подскажите. |
III,
:-? <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> window.onload = function () { document.querySelector('#fio').oninput = function () { this.value = ((this.value).split(' ').map(function(a, i) {return i > 2? a: a.replace(/([а-яё])([а-яё]+|$)/gi, function (a, b, c) {return b.toUpperCase()+c})}).join(' ')) } } </script> </head> <body> <form action="http://"> <input id="fio" name=""> </form> </body> </html> |
Все работает отлично. Большое спасибо.
|
Единственный недостаток в том, что первая буква слова переходит в верхний регистр только после ввода второй буквы. Можно л это как-то исправить?
|
Цитата:
|
Теперь все супер! Еще раз спасибо.
|
Часовой пояс GMT +3, время: 18:51. |