mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-06-05 15:09:37 +09:00
192 lines
4.0 KiB
PHP
192 lines
4.0 KiB
PHP
<?php
|
|
|
|
class UM_Validation {
|
|
|
|
function __construct() {
|
|
|
|
$this->regex_safe = '/\A[\w\-\.]+\z/';
|
|
$this->regex_safe_email = '/\A[\w\-\.\@]+\z/';
|
|
$this->regex_phone_number = '/\A[\d\-\.\+\(\)\ ]+\z/';
|
|
|
|
}
|
|
|
|
/***
|
|
*** @normalize a string
|
|
***/
|
|
function normalize($string) {
|
|
$string = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
|
|
return $string;
|
|
}
|
|
|
|
/***
|
|
*** @safe name usage ( for url purposes )
|
|
***/
|
|
function safe_name_in_url( $name ) {
|
|
$name = strtolower( $name );
|
|
$name = preg_replace("/'/","", $name );
|
|
$name = stripslashes( $name );
|
|
$name = $this->normalize($name);
|
|
$name = rawurldecode( $name );
|
|
return $name;
|
|
}
|
|
|
|
/***
|
|
*** @password test
|
|
***/
|
|
function strong_pass($candidate) {
|
|
$r1='/[A-Z]/';
|
|
$r2='/[a-z]/';
|
|
$r3='/[0-9]/';
|
|
if(preg_match_all($r1,$candidate, $o)<1) return false;
|
|
if(preg_match_all($r2,$candidate, $o)<1) return false;
|
|
if(preg_match_all($r3,$candidate, $o)<1) return false;
|
|
return true;
|
|
}
|
|
|
|
/***
|
|
*** @space, dash, underscore
|
|
***/
|
|
function safe_username( $string ) {
|
|
if ( is_email( $string ) && !preg_match( $this->regex_safe_email, $string ) )
|
|
return false;
|
|
if ( !is_email( $string) && !preg_match( $this->regex_safe, $string ) )
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
/***
|
|
*** @dash and underscore (metakey)
|
|
***/
|
|
function safe_string($string){
|
|
if ( !preg_match( $this->regex_safe, $string) )
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
/***
|
|
*** @is phone number
|
|
***/
|
|
function is_phone_number( $string ){
|
|
if ( !preg_match( $this->regex_phone_number, $string) )
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
/***
|
|
*** @is url
|
|
***/
|
|
function is_url( $url, $social = false ){
|
|
if ( !$url ) return true;
|
|
|
|
if ( $social ) {
|
|
|
|
if ( !filter_var($url, FILTER_VALIDATE_URL) && strstr( $url, $social ) ) { // starts with social requested
|
|
return true;
|
|
} else {
|
|
|
|
if ( filter_var($url, FILTER_VALIDATE_URL) && strstr( $url, $social ) ) {
|
|
return true;
|
|
} elseif ( preg_match( $this->regex_safe, $url) ) {
|
|
|
|
if ( strstr( $url, '.com' ) ){
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/***
|
|
*** @get a random string
|
|
***/
|
|
function randomize( $length = 10 ) {
|
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
$result = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$result .= $characters[rand(0, strlen($characters) - 1)];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/***
|
|
*** @generate a password, hash, or similar
|
|
***/
|
|
function generate( $length = 12 ) {
|
|
return wp_generate_password($length, false);
|
|
}
|
|
|
|
/***
|
|
*** @random numbers only
|
|
***/
|
|
function random_number($len = false) {
|
|
$ints = array();
|
|
$len = $len ? $len : rand(2,9);
|
|
if($len > 9)
|
|
{
|
|
trigger_error('Maximum length should not exceed 9');
|
|
return 0;
|
|
}
|
|
while(true)
|
|
{
|
|
$current = rand(0,9);
|
|
if(!in_array($current,$ints))
|
|
{
|
|
$ints[] = $current;
|
|
}
|
|
if(count($ints) == $len)
|
|
{
|
|
return implode($ints);
|
|
}
|
|
}
|
|
}
|
|
|
|
/***
|
|
*** @To validate given date input
|
|
***/
|
|
function validate_date( $date, $format='YYYY/MM/D' ) {
|
|
if ( strlen( $date ) < strlen($format) ) return false;
|
|
if ( $date[4] != '/' ) return false;
|
|
if ( $date[7] != '/' ) return false;
|
|
if ( false === strtotime($date) ) return false;
|
|
return true;
|
|
}
|
|
|
|
/***
|
|
*** @checks if data is serialized
|
|
***/
|
|
function is_serialized( $data ) {
|
|
// if it isn't a string, it isn't serialized
|
|
if ( !is_string( $data ) )
|
|
return false;
|
|
$data = trim( $data );
|
|
if ( 'N;' == $data )
|
|
return true;
|
|
if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
|
|
return false;
|
|
switch ( $badions[1] ) {
|
|
case 'a' :
|
|
case 'O' :
|
|
case 's' :
|
|
if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
|
|
return true;
|
|
break;
|
|
case 'b' :
|
|
case 'i' :
|
|
case 'd' :
|
|
if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
|
|
return true;
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
} |