//英數
jQuery.validator.addMethod("alphanumeric", function(value, element) {
	return this.optional(element) || /^\w+$/i.test(value);
}, "Letters, numbers, spaces or underscores only please");  

//中文
jQuery.validator.addMethod("chineseonly", function(value, element) {
	return this.optional(element) || /[\u4e00-\u9fa5]/.test(value);
}, "只能輸入中文");  

//英文
jQuery.validator.addMethod("lettersonly", function(value, element) {
	return this.optional(element) || /^[a-z,0-9\s]+$/i.test(value);
}, "只能輸入英文字母"); 

//數字+符號
jQuery.validator.addMethod("numericswithbasicpunc", function(value, element) {
	return this.optional(element) || /^[0-9-+.,()#'\"\s]+$/i.test(value);
}, "只能輸入數字與符號");  

//身份證字號1
jQuery.validator.addMethod("ROC_Citizen_ID_regex",
 function(citizenid, element) {
  citizenid = citizenid.replace(/\s+/g, "");
   return (
	  this.optional(element) ||
	  /^[A-Z]{1}[1-2]{1}[0-9]{8}$/.test(citizenid)
	);
}, "身份證字號格式有誤"
);

//身份證字號2
jQuery.validator.addMethod("ROC_Citizen_ID_arithmetic",
function(citizenid, element) {
	 var local_table = [10,11,12,13,14,15,16,17,34,18,19,20,21,
					   22,35,23,24,25,26,27,28,29,32,30,31,33];
				   /* A, B, C, D, E, F, G, H, I, J, K, L, M,
					  N, O, P, Q, R, S, T, U, V, W, X, Y, Z */

  var local_digit = local_table[citizenid.charCodeAt(0)-'A'.charCodeAt(0)];
   var checksum = 0;
   checksum += Math.floor(local_digit / 10);
  checksum += (local_digit % 10) * 9;
   /* i: index; p: permission value */
  /* this loop sums from [1] to [8] */
  /* permission value decreases */
   for (var i=1, p=8; i <= 8; i++, p--)
  {
	checksum += parseInt(citizenid.charAt(i)) * p;
  }
   checksum += parseInt(citizenid.charAt(9));    /* add the last number */
   return (
	  this.optional(element) || !(checksum % 10)
	);
}, "身份證字號不正確"
);
