brithwulf
brithwulf

Reputation: 548

How to capitalize first and third letter?

I want to capitalize first letter and third letter in my textarea.

I can capitalize only first letter and then every next letters and words are transformed to lowercase.

If there is any solution for this problem, please tell me.

I am using AngularJS.

This is what im trying and did.

  link: function (scope, iElement, iAttrs, controller) {
        //console.log('init');

         controller.$parsers.push(function (inputValue) {
          var transformedInput = (!!inputValue) ? inputValue.charAt(0).toUpperCase()  + inputValue.substr(1).toLowerCase() : '';
                      if (transformedInput != inputValue) {
            controller.$setViewValue(transformedInput);
            controller.$render();
        }

        return transformedInput;
    });

This works only for first letter, it transforms to uppercase and then transforms another letter and words to lowercase.

I tried to change my code into this but nothing.

  var transformedInput = (!!inputValue) ? inputValue.charAt(0).toUpperCase()  + inputValue.substr(1).toLowerCase()  + inputValue.charAt(3).toUpperCase() + inputValue.substr(4).toLowerCase(): '';

Upvotes: 1

Views: 2717

Answers (5)

rvchauhan
rvchauhan

Reputation: 89

My solution for "McArturo" this type of text you want

$("#LastName").keyup(function () {
var last_name = $("#LastName").val();
var op = last_name.substr(0, 2);
if (op == "mc" || op == "Mc" || op == "MC") {
    $("#LastName").val("Mc" + (last_name.charAt(2).toUpperCase()) + last_name.substr(3).toLowerCase());
} else {
    $("#LastName").val(last_name.charAt(0).toUpperCase() + last_name.substr(1).toLowerCase());
}});

Upvotes: 0

vatz88
vatz88

Reputation: 2452

Have a look at this. Same as what you are doing just using for loop to identify the character index to modify.

var inputValue = "test";

var transformedInput = '';

if(inputValue){
    for(var i=0; i<inputValue.length; i++){
  	if(i===0 || i=== 2){
	    transformedInput += inputValue.charAt(i).toUpperCase();
        } else {
    	    transformedInput += inputValue.charAt(i).toLowerCase();
    }
  }
}

console.log(transformedInput);

Upvotes: 2

Fissio
Fissio

Reputation: 3758

Seeing how you need to have the input change as you type, you'll probably need a directive; here's a one to capitalize the given letters of any input with an ng-model:

https://plnkr.co/edit/hWhmjQWdrghvsL20l3DE?p=preview

app.directive('myUppercase', function() {
  return {
    scope: {
      positions: '=myUppercase'
    },
    require: 'ngModel',
    link: function(scope, elem, attrs, ngModelCtrl) {

      scope.positions = scope.positions || []

      function makeString(string) {
        if (!string) return;
        angular.forEach(scope.positions, function(pos) {
          string = string.slice(0, pos) + string.slice(pos, pos+1).toUpperCase() + string.slice(pos + 1)
          console.log(string)
        })
        return string;
      }

      ngModelCtrl.$parsers.push(makeString)
      ngModelCtrl.$formatters.push(makeString)
    }
  }
})

HTML:

<input ng-model="value" my-uppercase="[0, 2]">

Upvotes: 1

Pavel
Pavel

Reputation: 11

My simple solution

var inputValue = 'your value';

function toUpper (str) {
    var result = '';
    for (var i = 0; i < str.length; i++) {
        if (i === 0 || i === 2) {
            result += str[i].toUpperCase();
        } else {
            result += str[i].toLowerCase();
        }
    }
    return result;
}
var transformedInput = toUpper(inputValue);

Upvotes: 1

euvl
euvl

Reputation: 4786

Here is a function to capitalize chars at specific positions

function capitalizeAtPositions(string, indexes) {
  (indexes || []).forEach(function(index) {
    if (string.length < index) return;

    string = string.slice(0, index) +
      string.charAt(index).toUpperCase() + string.slice(index+1);
  });
  return string;
}

Run it as follows:

var test = "abcdefg";
var result = capitalizeAtPositions(test, [0, 2]);
//AbCdefg

In your case i think it will be something like (can't test it without jsfiddle):

var transformedInput = capitalizeAtPositions(inputValue || '', [0, 2]);

Upvotes: 1

Related Questions