2017-05-06 42 views
1

這是我的第一篇文章,我認爲答案是很容易的,但我不明白這一點:的Javascript正則表達式輸入驗證

我(嘗試)來構建shopify店,但我必須做出一些修改,並在這裏是我卡在哪裏的地方:

在我的產品頁上,我想包含<input type=text>,這是必需的,只能是大寫字母,長度必須爲最小值。是1和最大。 10.我用html5模式嘗試過,但沒有奏效。我讀了一些東西,如果shopify主題包含ajax,它只是忽略了模式和必需的屬性(我不知道這是否屬實)。

所以我試圖使自己的職能:

$('#dein-text').on("change textInput input", function(evt) { 
    $(this).val(function (_, val) { 
     return val.toUpperCase(); 
    }); 
}); 

這只是應該返回字符串爲大寫字母。

function checkText() { 
    var re = /(?=.*[A-Z]).{1,6}/; 
    if(re.test($('#dein-text').val())) { 
     $('#problem-bei-input').hide(); 
     $('.add', $product).removeClass('disabled').removeAttr('disabled'); 
    } else {  
     $('#problem-bei-input').show(); 
     $('.add', $product).addClass('disabled').attr('disabled', 'disabled'); 
    } 
} 

這個功能在輸入表格上的每一個變化執行: $('#dein-text').on("change textInput input", checkText);

這是不行的,因爲它消除殘疾類,如果有分鐘。 1個字母(它不檢查是否有6個以上)以及是否有一個大寫字母(如「HA11」不添加(.disabled)類)。

我希望我能描述我的問題是什麼。

謝謝你的幫助!

編輯:這是整個形式的.liquid代碼:

https://codepen.io/shawdyy/pen/PmOPWy

(我希望你能看到這對codepen,SRY我真的很新的東西Webdev的)

+0

也張貼您的HTML代碼 – JYoThI

+0

沒有'pattern =「[A-Z] {1,10}」'工作嗎? –

+0

如果您需要匹配只包含1到10個大寫ascii字母的字符串,您需要'var re =/^ [A-Z] {1,10} $ /'。 –

回答

0

你可以試試:

$('#my_id').on("change input", function(evt) { 
 
    $(this).val(function (_, val) { 
 
     return val.toUpperCase().replace(/[^A-Z]/, "").replace(/^([A-Z]{1,10}).*$/g, "$1"); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="my_id">

0

只允許在輸入字段一到十ASCII大寫字母使用下面的HTML5模式:

<input type="text" pattern="[A-Z]{1,10}" title="Only 1 to 10 uppercase ASCII letters allowed!"> 

如果你需要匹配只包含純JS 1至10大寫ASCII字符的字符串,你需要

 var re = /^[A-Z]{1,10}$/; 

注意,開始和結束錨(^/$)由HTML5 automatIically在pattern屬性使用正則表達式時加入。