2015-04-01 90 views
0

我正在使用Jquery Validate,我需要一個自定義的驗證方法。配置JQ驗證接受沒有http://前綴的URL

默認的URL方法將不會接受一個URL,除非它有一個模式。我的用戶只會提供以http://開頭的URL,所以我寧願不必每次都通過輸入它的麻煩。

我想創建一個驗證方法,它將使用默認的URL方法來檢查URL的有效性。如果失敗,我想先插入http://並再次運行它。這是我到目前爲止有:

addCustomUrlValidator: function() { 
    $.validator.addMethod("short-url", function(value, element) { 

     if (value.length == 0) return true; // the field is optional 

     // attempt to validate with default URL method. Return true on valid. 
     // ... 

     // prepend http:// to value and attempt validation again. Return true on valid. 
     // ... 

     return false 

    }, jQuery.validator.format("Must be a valid URL format")); 
} 
+0

您不能使用'.addMethod()'更改字段值。您只能輸出true/false來指示此自定義規則的通過/失敗。 – Sparky 2015-04-01 13:52:24

+0

要創建這個新方法,請查看[插件源代碼](http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.js)中的url方法,將其複製正則表達式到你的'.addMethod()'函數中並調整它以忽略協議......在這種情況下,簡單地刪除正則表達式的'(https?| s?ftp):\/\ /'部分。 – Sparky 2015-04-01 13:56:06

+0

謝謝Sparky,如果你寫出答案,我會接受它 – 2015-04-24 06:53:51

回答

1

我使用jQuery驗證,我需要一個自定義的驗證方法。

請參閱the .addMethod() method documentation我們如何在下面做到這一點。

默認的URL方法不會接受一個URL,除非它有一個模式。我的用戶只會提供以http://開頭的URL,所以我寧願不必每次都通過輸入它的麻煩。

我已經從默認url方法inside the plugin複製的功能本身和編輯正則表達式,這樣你就不需要URI方案。 (我只是刪除了(https?|s?ftp):\/\/部分的正則表達式。)注意這個新規則叫做my_url,你可以把它改成任何你想要的。

jQuery.validator.addMethod('my_url', function(value, element) { 
    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ 
    return this.optional(element) || /^(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); 
}, 'Please enter a valid url without the "http".'); 

如果失敗,我想在前面加上http://並重新運行。

操作數據是在提交表單後服務器端應該執行的操作。您應該只從自定義方法返回truefalse,不能操作任何數據,也不能通過編程方式多次強制通過相同規則的相同數據。用戶輸入正確的格式或者他沒有...用戶然後再次嘗試。