如何把第一个和第三个字母大写?

时间:2017-02-22 12:23:22

标签: javascript html angularjs

我想在我的textarea中将首字母和第三个字母大写。

我只能将第一个字母大写,然后将每个下一个字母和单词转换为小写字母。

如果有任何解决此问题的方法,请告诉我。

我正在使用AngularJS。

这就是我的尝试和做法。

  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;
    });

这仅适用于第一个字母,它转换为大写,然后将另一个字母和单词转换为小写。

我试图将我的代码更改为此但没有。

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

5 个答案:

答案 0 :(得分:2)

看看这个。与您正在使用for循环来识别要修改的字符索引相同。

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);

答案 1 :(得分:1)

这是一个将特定位置的字符大写的功能

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;
}

按如下方式运行:

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

在你的情况下,我认为它会像(不能在没有jsfiddle的情况下测试它):

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

答案 2 :(得分:1)

看到你在键入时需要改变输入,你可能需要一个指令;这是一个用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]">

答案 3 :(得分:1)

我的简单解决方案

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);

答案 4 :(得分:0)

试试这个

var firstUpperCase = inputValue.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});

  var transformedInput = '';
        for(i = 0; i < firstUpperCase.length; i++){
            if(i > 0 && i % 3 == 0){
                transformedInput += firstUpperCase[i].toUpperCase();
            }else{
                transformedInput += firstUpperCase[i];
            }
        }