javascript验证 - 只允许一个大写字母

Jas*_*son 1 javascript string uppercase

我需要添加一些验证,只允许包含空格的字符串中的一个大写字母.大写字母可以是字符串中的任何位置,但只能使用一次或根本不使用.

我打算将下面的解决方案作为一个单独的规则,但我有一点验证,并想知道我是否可以调整它以获得所需的结果:

// Validate Sentence Case
if(dataEntryCaseId.toString().match("4")){
    var newValue = toTitleCase(value);
    if(newValue != value){
        for(var x = 1, j = value.length; x < j; x++){
            if(value.charAt(x) != newValue.charAt(x)){
                valid = false;
                $("#text_10").attr({"value":$("#text_10").attr("value").replace(value.charAt(x), "")});
                finalVal = finalVal.replace(value.charAt(x), "");
            }
        }
    }
}


if(!valid){
    for(var x = 0, j = styleNoteJsonData.styleGroupNote.length; x < j; x++){
        if(styleNoteJsonData.styleGroupNote[x].styleName == styleGroupName){
            alert(styleNoteJsonData.styleGroupNote[x].styleNote);           
            $(".styleNote").addClass("alertRed");
            SendErrorMessage(styleNoteJsonData.styleGroupNote[x].styleNote);                
        }
    }
Run Code Online (Sandbox Code Playgroud)

Bil*_*oon 7

"this is A way to do it with regex".match(/^[^A-Z]*[A-Z]?[^A-Z]*$/)
Run Code Online (Sandbox Code Playgroud)

正则表达式像这样崩溃......

start(^)后面跟不是大写字母([^A-Z])零次或多次(*)后跟可选(?)大写字母([A-Z])后面跟不是大写字母([^A-Z])零次或多次(*)后跟字符串结尾($)


编辑:基于来自@ IAbstractDownvoteFactory的答案的想法的简单方法

var string = "This is a simple way to do it"

// match all capital letters and store in array x
var x = string.match(/[A-Z]/g)

// if x is null, or has length less than 2 then string is valid
if(!x || x.length < 2){
    // valid
} else {
    // not valid
}
Run Code Online (Sandbox Code Playgroud)

正则表达式匹配所有大写字母,并返回匹配数组.数组的长度是有多少个大写字母,所以少于2个返回true.