如何大写输入框内的文本,句子的第一个字母和句点后的字母

时间:2015-10-19 20:46:16

标签: jquery regex angularjs forms validation

我已经将每个句子的第一个字母大写,但是当我尝试进一步输入大写字母时,它也会转换为小写字母。此外,我需要在完全停止后将首字母大写。

输入:汤姆很开心。汤姆很伤心

我的解决方案输出:汤姆很开心。这很伤心

预期输出:汤姆很高兴。汤姆很伤心

var app = angular.module('myApp', []);

app.filter('capitalizeFirst', function () {
return function (input, scope) {
    if(input!=input.toUpperCase())
    var text = input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase(); 
    return text;
}
});

app.directive('capitalizeFirst', ['$filter', function ($filter) {
return {
    require: 'ngModel',
    link: function (scope, element, attrs, controller) {
        controller.$parsers.push(function (value) {

            var transformedInput = $filter('capitalizeFirst')(value);
            if (transformedInput !== value) {

                var el = element[0];
                el.setSelectionRange(el.selectionStart, el.selectionEnd);
                controller.$setViewValue(transformedInput);
                controller.$render();
            }
            return transformedInput;

        });
    }
};
}]);

function MyCtrl($scope, $filter) {
$scope.name = $filter('capitalizeFirst')('apple');
}

1 个答案:

答案 0 :(得分:1)

使用string#split功能将字符串分解为句子。这会创建一个数组。我们可以使用map函数修改数组的所有元素。

此功能包含两个参数。一个用于数组元素,另一个用于索引。将数组重新打包在一起时,我们希望使用.分隔符连接元素。第一句话不以句号开头,因此我们必须考虑不同的索引。

var par = document.getElementById("my-par");
var text = par.innerHTML;

var sentences = text.split('.').map(function(input, index) {
    if (index === 0) {
        return input.charAt(0).toUpperCase() +
        input.substring(1).toLowerCase();
    }
    else {
        return input.substring(0,1) + input.charAt(1).toUpperCase() +
        input.substring(2).toLowerCase();
    }
}).join('. ');


alert(sentences);

http://jsfiddle.net/9bgd8ztg/