Added emaiul test
This commit is contained in:
@@ -21,7 +21,7 @@ export function isString(): Validator {
|
||||
*
|
||||
* @param param Options
|
||||
*/
|
||||
export function isURL(
|
||||
export function isUrl(
|
||||
{
|
||||
protocols = ["http", "https"],
|
||||
allowDataUrl = false,
|
||||
@@ -31,7 +31,7 @@ export function isURL(
|
||||
allowDomain = true,
|
||||
allowBasicAuth = false,
|
||||
allowPort = true,
|
||||
allowRecourcePath = true
|
||||
allowRecourcePath = true,
|
||||
}: {
|
||||
protocols?: string[] | null;
|
||||
allowDataUrl?: boolean;
|
||||
@@ -45,19 +45,18 @@ export function isURL(
|
||||
} = {},
|
||||
): Validator {
|
||||
return {
|
||||
type: "isURL",
|
||||
type: "isUrl",
|
||||
extends: [isString()],
|
||||
check: (value: any) => {
|
||||
if (value === null || value === undefined) return;
|
||||
if (allowUrl) {
|
||||
|
||||
let regex = "^";
|
||||
// protocol identifier (optional)
|
||||
// short syntax // still required
|
||||
if (protocols) {
|
||||
regex += `(?:(?:(?:${protocols.join("|")}):)?\\/\\/)`
|
||||
regex += `(?:(?:(?:${protocols.join("|")}):)?\\/\\/)`;
|
||||
} else {
|
||||
regex += `(?:(?:(?:[a-z]+):)?\/\/)`
|
||||
regex += `(?:(?:(?:[a-z]+):)?\/\/)`;
|
||||
}
|
||||
// user:pass BasicAuth (optional)
|
||||
if (allowBasicAuth) {
|
||||
@@ -71,8 +70,8 @@ export function isURL(
|
||||
}
|
||||
if (allowIp) {
|
||||
regex += "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
|
||||
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
|
||||
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))";
|
||||
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
|
||||
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))";
|
||||
}
|
||||
if (allowIp || allowDomain) {
|
||||
regex += "|"; // [hostname] ip end / domain start
|
||||
@@ -81,25 +80,24 @@ export function isURL(
|
||||
// host & domain names, may end with dot
|
||||
// can be replaced by a shortest alternative
|
||||
// (?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.)+
|
||||
regex +=
|
||||
regex += "(?:" +
|
||||
"(?:" +
|
||||
"(?:" +
|
||||
"[a-z0-9\\u00a1-\\uffff]" +
|
||||
"[a-z0-9\\u00a1-\\uffff_-]{0,62}" +
|
||||
")?" +
|
||||
"[a-z0-9\\u00a1-\\uffff]\\." +
|
||||
"[a-z0-9\\u00a1-\\uffff]" +
|
||||
"[a-z0-9\\u00a1-\\uffff_-]{0,62}" +
|
||||
")?" +
|
||||
"[a-z0-9\\u00a1-\\uffff]\\." +
|
||||
")+" +
|
||||
// TLD identifier name, may end with dot
|
||||
"(?:[a-z\\u00a1-\\uffff]{2,}\\.?)"
|
||||
"(?:[a-z\\u00a1-\\uffff]{2,}\\.?)";
|
||||
}
|
||||
regex += ")"; // [hostname] end
|
||||
if (allowPort) {
|
||||
// port number (optional)
|
||||
regex += "(?::\\d{2,5})?"
|
||||
regex += "(?::\\d{2,5})?";
|
||||
}
|
||||
if (allowRecourcePath) {
|
||||
// resource path (optional)
|
||||
regex += "(?:[/?#]\\S*)?"
|
||||
regex += "(?:[/?#]\\S*)?";
|
||||
}
|
||||
regex += "$";
|
||||
if (value.match(new RegExp(regex, "i"))) {
|
||||
@@ -107,15 +105,38 @@ export function isURL(
|
||||
}
|
||||
}
|
||||
if (allowDataUrl) {
|
||||
const regex = /^\s*data:([a-z]+\/[a-z]+(;[a-z\-]+\=[a-z\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i;
|
||||
const regex =
|
||||
/^\s*data:([a-z]+\/[a-z]+(;[a-z\-]+\=[a-z\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i;
|
||||
if (value.match(regex)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
return { };
|
||||
return {};
|
||||
},
|
||||
message: (value: any, args?: Args) => {
|
||||
return `This value is not a valid URL.`;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression
|
||||
*/
|
||||
export function isEmail(): Validator {
|
||||
return {
|
||||
type: "isEmail",
|
||||
extends: [isString()],
|
||||
check: (value: any) => {
|
||||
if (value === null || value === undefined) return;
|
||||
const regex =
|
||||
/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i;
|
||||
if (value.match(regex)) {
|
||||
return;
|
||||
}
|
||||
return {};
|
||||
},
|
||||
message: (value: any, args?: Args) => {
|
||||
return `This value has to be an email address.`;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user