/////////////////////
////    ALPHA    ////
/////////////////////

/**
 * alhpa
 * only a-z
 */
jQuery.validator.addMethod("alpha", function(value, element) {
    return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only please");

/**
 * alphaSpace
 * a-z + spaces
 */
jQuery.validator.addMethod("alphaSpace", function(value, element) {
    return this.optional(element) || /^[a-z\s]+$/i.test(value);
}, "Letters and spaces only please");

/**
 * alphaUnicode
 * unicode letters
 *
 * @see http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
 */
jQuery.validator.addMethod("alphaUnicode", function(value, element) {
    var unicodeWord = new XRegExp('^\\p{L}+$');
    return this.optional(element) || unicodeWord.test(value);
}, "(unicode)Letters only please");

/**
 * alphaUnicodeSpace
 * unicode letters and spaces
 *
 * @see http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
 */
jQuery.validator.addMethod("alphaUnicodeSpace", function(value, element) {
    var unicodeWord = new XRegExp('^(\\p{L}|\\s)+$');
    return this.optional(element) || unicodeWord.test(value);
}, "(unicode)Letters and spaces only please");

//////////////////////////////////////////
////       ALPHA + PUNCTUATION        ////
//////////////////////////////////////////

/**
* alhpa
* only a-z
*/
jQuery.validator.addMethod("alphaPunc", function(value, element) {
return this.optional(element) || /^[\w\s\.,]+$/.test(value);
}, "Letters and numbers only please");

/**
* alphaUnicode
* unicode letters
*
* @see http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
*/
jQuery.validator.addMethod("alphaUnicodePunc", function(value, element) {
var unicodeWord = new XRegExp('^(\\p{L}|\\s|[.,])+$');
return this.optional(element) || unicodeWord.test(value);
}, "(unicode)Letters and numbers only please");


////////////////////////////
////    ALPHANUMERIC    ////
////////////////////////////

/**
 * alhpa
 * only a-z
 */
jQuery.validator.addMethod("alnum", function(value, element) {
    return this.optional(element) || /^[\w\d]+$/.test(value);
}, "Letters and numbers only please");

/**
 * alphaSpace
 * a-z + spaces
 */
jQuery.validator.addMethod("alnumSpace", function(value, element) {
    return this.optional(element) || /^[\w\d\s]+$/.test(value);
}, "Letters, numbers and spaces only please");

/**
 * alphaUnicode
 * unicode letters
 *
 * @see http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
 */
jQuery.validator.addMethod("alnumUnicode", function(value, element) {
    var unicodeWord = new XRegExp('^(\\p{L}|\\d)+$');
    return this.optional(element) || unicodeWord.test(value);
}, "(unicode)Letters and numbers only please");

/**
 * alphaUnicodeSpace
 * unicode letters and spaces
 *
 * @see http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
 */
jQuery.validator.addMethod("alnumUnicodeSpace", function(value, element) {
    var unicodeWord = new XRegExp('^(\\p{L}|\\d|\\s)+$');
    return this.optional(element) || unicodeWord.test(value);
}, "(unicode)Letters, numbers and spaces only please");


//////////////////////////////////////////
////    ALPHANUMERIC + PUNCTUATION    ////
//////////////////////////////////////////

/**
 * alhpa
 * only a-z
 */
jQuery.validator.addMethod("alnumPunc", function(value, element) {
    return this.optional(element) || /^[\w\d\s\.,]+$/.test(value);
}, "Letters and numbers only please");

/**
 * alphaUnicode
 * unicode letters
 *
 * @see http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
 */
jQuery.validator.addMethod("alnumUnicodePunc", function(value, element) {
    var unicodeWord = new XRegExp('^(\\p{L}|\\d|\\s|[.,])+$');
    return this.optional(element) || unicodeWord.test(value);
}, "(unicode)Letters and numbers only please");
