2011-09-09 9 views
1

空白を含む可能性のある文字列に大文字を1つだけ許可する検証を追加する必要があります。大文字は文字列内のどこにでも置くことができますが、一度しか使用できないか、まったく使用できません。JavaScriptの検証 - 1つの大文字のみを許可する

私は別のルールとして、以下のソリューションを組み込むつもりだったが、私は検証のこのビットを持っていると私は望ましい結果を得るためにそれを微調整することができるかどうか迷っ:

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

答えて

7
"this is A way to do it with regex".match(/^[^A-Z]*[A-Z]?[^A-Z]*$/) 

正規表現がダウンして、このような壊れ...ない資本文字が続く文字列(^)([^A-Z])0回以上(*)オプション(?)大文字で続くの

スタート([A-Z] )ではない資本文字が続く文字列($


の終わりに続いて( [^A-Z])0回以上( *

EDIT:@ 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 
} 

正規表現からのアイディアに基づいて簡単な方法は、すべて大文字に一致し、マッチの配列を返します。配列の長さは大文字の数なので、2未満ではtrueを返します。

+0

+1私はあなたが正規表現でこれを行うことができるとは思わなかった。非貪欲...あなたは最高です。 –

+0

もう少しコンテキストを追加してもよろしいですか?たとえば、!= .match(/^[^ A-Z] * [A-Z]?[^ A-Z] * $ /);アラート(大量の首都);それは基本的な使い方ですか? – Jason

+0

あなたが私の答えが好きなら、兄弟にアップヴォートを投げることができます:P – Joe

1

あなたが好きなものを与えることができますこれは試してみてください:

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

各文字をループして、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 
} 
2

方法:

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

は大文字に文字列を分割します。長さが2の場合、ちょうど1つのキャプティールがあります。

+0

。比較的単純 – Jason

関連する問題