проверка JavaScript - разрешить только одну заглавную букву - PullRequest
1 голос
/ 09 сентября 2011

Мне нужно добавить некоторые проверки, которые позволят использовать только одну заглавную букву в строке, которая может включать пробелы.Прописная буква может быть где угодно в строке, но может использоваться только один раз или не использоваться вообще.

Я собирался включить приведенное ниже решение в качестве отдельного правила, но у меня есть немного подтверждения и интересно,Я могу просто настроить его, чтобы получить желаемый результат:

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

Ответы [ 4 ]

7 голосов
/ 10 сентября 2011
"this is A way to do it with regex".match(/^[^A-Z]*[A-Z]?[^A-Z]*$/)

Regex ломается вот так ...

начало строки (^), за которым следует не заглавная буква ([^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
}

Regex сопоставляет все заглавные буквы и возвращает массив совпадений. Длина массива равна количеству прописных букв, поэтому меньше 2 возвращает true.

2 голосов
/ 10 сентября 2011

Как насчет этого:

var string = "A string";
if(string.split(/[A-Z]/).length <= 2) {
    // all good
}
else {
    // validation error
}

Разбить строку на заглавные буквы.Если длина равна 2, то есть ровно один капитал.

1 голос
/ 10 сентября 2011

Вы можете попробовать что-то вроде этого:

function checkCapitals(InputString)
{

    // Counter to track how many capital letters are present
    var howManyCapitals = 0;

    // Loop through the string
    for (i = 0; i < InputString.length; i++)
    {

        // Get each character of the string
        var character = InputString[i];

        // Check if the character is equal to its uppercase version and not a space
        if (character == character.toUpperCase() && character != ' ') {
         // If it was uppercase, add one to the uppercase counter
         howManyCapitals++;
        }

    }

        // Was there more than one capital letter?
        if (howManyCapitals > 1)
        {
             // Yes there was! Tell the user.
             alert("You have too many capital letters!");
             return false;
        }

}

Надеюсь, я вам чем-то помог.

0 голосов
/ 10 сентября 2011

Не могли бы вы пройтись по каждому символу, чтобы проверить, равен ли он ASCII-кодам с 65 по 94?

var CharArr = "mystring".toCharArray();
var countCapsChars = 0;

for(var i =0;i<= CharArr.length;i++) {
if (CharArr[i].CharCodeAt(0) >= 65 && CharArr[i].CharCodeAt(0) <=94) {
  countCapsChars++;
}

if (countCapsChars == 1 || countCapsChars == 0){
//pas
}
else 
{
//fail
}
...