2017-04-12 33 views
0

我有以下的角度指令,應利用輸入並拒絕不屬於英文字母字符的任何字符:角指示大寫字母,而忽略數字

<input type="text" maxlength="1" capitalize /> 


.directive('capitalize', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attrs, modelCtrl) { 
     var capitalize = function(inputValue) { 
     if (inputValue == undefined) inputValue = ''; 

     inputValue = inputValue.replace(/[^a-zA-Z]/g, ''); //to reject non-alphabet characters 
     var capitalized = inputValue.toUpperCase(); 
     if (capitalized !== inputValue) { 
      modelCtrl.$setViewValue(capitalized); 
      modelCtrl.$render(); 
     } 
     return capitalized; 
     } 
     modelCtrl.$parsers.push(capitalize); 
     capitalize(scope[attrs.ngModel]); // capitalize initial value 
    } 
    }; 
}) 

它確實大寫輸入,但不拒絕非字母字符。建議?

+0

我放棄你的代碼爲小提琴和它的工作。如果您沒有輸入正確的信息,模型不會更新:http://jsfiddle.net/p149wuL1/ –

+0

更正模型沒有更新,但是如何防止文本輸入接受不正確的字符? – lilbiscuit

+0

您可以查看angular-ui-mask來查看它是否滿足您的需求。 –

回答

2

將獨立變量中的特殊章程刪除後存儲更新的輸入值,然後將其大寫,以便可以將大寫的更新輸入值與原始值進行比較。

var charString = inputValue.replace(/[^a-zA-Z]/g, ''); //to reject non-alphabet characters 
var capitalized = charString.toUpperCase(); 

更新的jsfiddle這裏:http://jsfiddle.net/p149wuL1/3/ 我希望這有助於

0

這是相當普遍的想法 - 讓我們只允許輸入一些特殊字符。 (在你的情況只有字母)它看起來有一段時間的吸引力。

不幸的是,沒有簡單的解決方案。看起來沒有用戶友好的解決方案。請記住,有輸入的3種主方式到文本字段: 1.鍵盤 2.複製粘貼 3.拖放

如果第一個方式,可以合理地處理,那第二和第三個? 「123%^ $ R,A」應該貼在你的案子上?粘貼'123'的結果應該是什麼?沒有?

這裏添加一些技巧,以保持CARRET位置...

綜上所述,我好心建議你讓文本字段設置爲文本字段,只是輸入標記爲無效,如果有錯誤的字符。

+0

如果指令可以將「c」更改爲「C」,爲什麼不能將「2」更改爲「?」? – lilbiscuit

+0

,因爲當你粘貼123並且看不到任何改變 - 這看起來沒有任何作用,也因爲它改變了文本的大小 - 將'a1b'粘貼到max-length ='2'的字段導致a1,轉換爲A1是無害的,轉換爲1很奇怪。嘗試在Google網站上找到這樣的控件。 –

相關問題