Массив по нескольким разделителям.
Прошу помощи ! Необходимо переделать следующий код (или дайте совет как это осуществить):
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, время: 09:39. |