ukui-clock/fieldvalidutil.cpp

438 lines
12 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2020, Tianjin KYLIN Information Technology Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/&gt;.
*
*/
#include "fieldvalidutil.h"
FieldValidUtil::FieldValidUtil(QObject *parent) : QObject(parent)
{
}
bool FieldValidUtil::isNull(int value)
{
if(value==0) return true;
return false;
}
bool FieldValidUtil::isNull(QString str)
{
return str.isNull()||str.isEmpty();
}
bool FieldValidUtil::isNull(std::string str)
{
return str.empty();
}
bool FieldValidUtil::isNull(long value)
{
if(value==0) return true;
return false;
}
bool FieldValidUtil::isNull(float value)
{
if(abs(value) <= 1e-6) return true;
return false;
}
bool FieldValidUtil::isNull(double value)
{
if(abs(value) <= 1e-15) return true;
return false;
}
bool FieldValidUtil::isNotNull(int value)
{
return !isNull(value);
}
/**
* @brief 数据介于最大最小之间,取等号
* @param value
* @param small
* @param big
* @return
*/
bool FieldValidUtil::isValueBetweenRange(int value, int small, int big)
{
return value>=small&&value<=big;
}
bool FieldValidUtil::isNotNull(QString value)
{
return !isNull(value);
}
bool FieldValidUtil::isNotNull(long value)
{
return !isNull(value);
}
#define URL_REGEX_STR "^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$"
/**
* @brief 匹配URL地址
*/
bool FieldValidUtil::isUrl(QString str)
{
return match(str, URL_REGEX_STR);
}
#define PWD_REGEX_STR "^[a-zA-Z]\\w{6,12}$"
/**
* @brief 匹配密码以字母开头长度在6-12之间只能包含字符、数字和下划线。
*/
bool FieldValidUtil::isPwd(QString str)
{
return match(str, PWD_REGEX_STR);
}
#define STRING_CHECK_REGEX_STR "^[a-zA-Z0-9\u4e00-\u9fa5-_]+$"
/**
* @brief 验证字符只能包含中文、英文、数字、下划线等字符。
*/
bool FieldValidUtil::QStringCheck(QString str)
{
return match(str, STRING_CHECK_REGEX_STR);
}
#define EMAIL_REGEX_STR "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
/**
* @brief 匹配Email地址
*/
bool FieldValidUtil::isEmail(QString str)
{
return match(str, EMAIL_REGEX_STR);
}
#define INTEGER_REGEX_STR "^[+]?\\d+$"
/**
* @brief 匹配非负整数正整数+0
*/
bool FieldValidUtil::isInteger(QString str)
{
return match(str, INTEGER_REGEX_STR);
}
/**
* @brief 判断数值类型包括整数和浮点数
*/
bool FieldValidUtil::isNumeric(QString str)
{
if(isFloat(str) || isInteger(str)) return true;
return false;
}
#define DIGITS_REGEX_STR "^[0-9]*$"
/**
* @brief 只能输入数字
*/
bool FieldValidUtil::isDigits(QString str)
{
return match(str, DIGITS_REGEX_STR);
}
#define FLOAT_REGEX_STR "^[-\\+]?\\d+(\\.\\d+)?$"
/**
* @brief 匹配正浮点数
*/
bool FieldValidUtil::isFloat(QString str)
{
return match(str, FLOAT_REGEX_STR);
}
/**
* @brief 联系电话(手机/电话皆可)验证
*/
bool FieldValidUtil::isTel(QString text)
{
if(isMobile(text)||isPhone(text)) return true;
return false;
}
#define PHONE_REGEX_STR "^(\\d{3,4}-?)?\\d{7,9}$"
/**
* @brief 电话号码验证
*/
bool FieldValidUtil::isPhone(QString text)
{
return match(text, PHONE_REGEX_STR);
}
#define MOBILE_REGEX_STR "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$"
/**
* @brief 手机号码验证
*/
bool FieldValidUtil::isMobile(QString text)
{
if(text.length()!=11) return false;
return match(text, MOBILE_REGEX_STR);
}
#define IDCARD_NO_REGEX_STR "^(\\d{6})()?(\\d{4})(\\d{2})(\\d{2})(\\d{3})(\\w)$"
/**
* @brief 身份证号码验证
*/
bool FieldValidUtil::isIdCardNo(QString text)
{
return match(text, IDCARD_NO_REGEX_STR);
}
#define ZIPCODE_REGEX_STR "^[0-9]{6}$"
/**
* @brief 邮政编码验证
*/
bool FieldValidUtil::isZipCode(QString text)
{
return match(text, ZIPCODE_REGEX_STR);
}
/**
* @brief 判断整数num是否等于0
*/
bool FieldValidUtil::isIntEqZero(int num)
{
return num==0;
}
/**
* @brief 判断整数num是否大于0
*/
bool FieldValidUtil::isIntGtZero(int num)
{
return num>0;
}
/**
* @brief 判断整数num是否大于或等于0
*/
bool FieldValidUtil::isIntGteZero(int num)
{
return num>=0;
}
/**
* @brief 判断浮点数num是否等于0
*/
bool FieldValidUtil::isFloatEqZero(float num)
{
return isNull(num);
}
/**
* @brief 判断浮点数num是否大于0
*/
bool FieldValidUtil::isFloatGtZero(float num)
{
return num>1e-6;
}
#define RIGHTFUL_STRING_REGEX_STR "^[A-Za-z0-9_-]+$"
/**
* @brief 判断是否为合法字符(a-zA-Z0-9-_)
*/
bool FieldValidUtil::isRightfulQString(QString text)
{
return match(text, RIGHTFUL_STRING_REGEX_STR);
}
#define ENGLISH_REGEX_STR "^[A-Za-z]+$"
/**
* @brief 判断英文字符(a-zA-Z)
*/
bool FieldValidUtil::isEnglish(QString text)
{
return match(text, ENGLISH_REGEX_STR);
}
#define CHINESE_CHAR_REGEX_STR "^[\u0391-\uFFE5]+$"
/**
* @brief 判断中文字符(包括汉字和符号)
*/
bool FieldValidUtil::isChineseChar(QString text)
{
return match(text, CHINESE_CHAR_REGEX_STR);
}
#define CHINESE_REGEX_STR "^[\u4e00-\u9fa5]+$"
/**
* @brief 匹配汉字
*/
bool FieldValidUtil::isChinese(QString text)
{
return match(text, CHINESE_REGEX_STR);
}
/**
* @brief 是否包含中英文特殊字符,除英文"-_"字符外
*/
bool FieldValidUtil::isContainsSpecialChar(QString text)
{
if(isNull(text)) return false;
QString chars="[,`,~,!,@,#,$,%,^,&,*,(,),+,=,|,{,},',:,;,',[,],.,<,>,/,?,~,,@,#,¥,%,…,&,*,,,—,+,|,{,},【,】,,,,”,“,,。,,、,,]";
QStringList list =chars.split(",");
list<<","<<"\"";
for(QString ch : list){
if(text.contains(ch)) return true;
}
return false;
}
#define SPECIAL_STRING_FILTER_REGEX_STR "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~@#¥%……&*()——+|{}【】‘;:\"\"”“’。,、?]"
/**
* @brief 过滤中英文特殊字符,除英文"-_"字符外
*/
QString FieldValidUtil::QStringFilter(QString text)
{
QString regExpr=SPECIAL_STRING_FILTER_REGEX_STR;
return replaceAll(text,regExpr);
}
/**
* @brief 过滤中英文特殊字符,除英文"-_"字符外
*/
QString FieldValidUtil::QStringFilter(std::string text)
{
QString regExpr=SPECIAL_STRING_FILTER_REGEX_STR;
return replaceAll(text,regExpr);
}
#define SCRIPT_REGEX_STR "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"
#define STYLE_REGEX_STR "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"
#define HTML_REGEX_STR "<[^>]+>"
#define PATTERN_REGEX_STR "\\s+"
/**
* @brief 过滤html代码
*/
QString FieldValidUtil::htmlFilter(QString inputQString)
{
// 含html标签的字符串
QString htmlStr = inputQString;
QString textStr = "";
// 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>
QString regEx_script = SCRIPT_REGEX_STR;
// 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>
QString regEx_style = STYLE_REGEX_STR;
// 定义HTML标签的正则表达式
QString regEx_html = HTML_REGEX_STR;
//空白
QString patternStr = PATTERN_REGEX_STR;
htmlStr = replaceAll(htmlStr,regEx_script);
htmlStr = replaceAll(htmlStr,regEx_style);
htmlStr = replaceAll(htmlStr,regEx_html);
htmlStr = replaceAll(htmlStr,patternStr);
textStr = htmlStr;
return textStr;
}
/**
* @brief 匹配,方便统一替换正则方法
*/
bool FieldValidUtil::match(QString text, QString reg)
{
if (isNull(text) || isNull(reg))
return false;
QRegExp tempRexExp(reg);
return tempRexExp.exactMatch(text);
}
/**
* @brief 替换方法
*/
QString FieldValidUtil::replaceAll(QString text, QString reg)
{
return text.replace(QRegExp(reg),"");
}
QString FieldValidUtil::replaceAll(std::string text, QString reg)
{
return QString::fromStdString(text).replace(QRegExp(reg),"");
}
void FieldValidUtil::createEntityCode(QString fields)
{
QStringList list = fields.split(";");
foreach (QString var, list) {
QStringList tmp = var.split(",");
QString methodName = makeFirstUpper(tmp.at(1));
qDebug()<<"\t"<<"Q_PROPERTY ("<<tmp.at(0)<< " "<<tmp.at(1)<< " READ "<< tmp.at(1)<<"WRITE " << "set"<<methodName<<");";
}
}
QString FieldValidUtil::makeFirstUpper(QString str)
{
QChar first = str.front().toUpper();
str = str.remove(0,1);
str = first+str;
return str;
}
// 附 常用的正则表达式:
// 匹配特定数字:
// ^[1-9]d*$    //匹配正整数
// ^-[1-9]d*$   //匹配负整数
// ^-?[1-9]d*$   //匹配整数
// ^[1-9]d*|0$  //匹配非负整数(正整数 + 0
// ^-[1-9]d*|0$   //匹配非正整数(负整数 + 0
// ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
// ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
// ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
// ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0
// ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0
// 评注:处理大量数据时有用,具体应用时注意修正
//
// 匹配特定字符串:
// ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
// ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
// ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
// ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
// ^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
//
// 在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
//
// 只能输入数字:“^[0-9]*$”
// 只能输入n位的数字“^d{n}$”
// 只能输入至少n位数字“^d{n,}$”
// 只能输入m-n位的数字“^d{m,n}$”
// 只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
// 只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
// 只能输入有1-3位小数的正实数“^[0-9]+(.[0-9]{1,3})?$”
// 只能输入非零的正整数:“^+?[1-9][0-9]*$”
// 只能输入非零的负整数:“^-[1-9][0-9]*$”
// 只能输入长度为3的字符“^.{3}$”
// 只能输入由26个英文字母组成的字符串“^[A-Za-z]+$”
// 只能输入由26个大写英文字母组成的字符串“^[A-Z]+$”
// 只能输入由26个小写英文字母组成的字符串“^[a-z]+$”
// 只能输入由数字和26个英文字母组成的字符串“^[A-Za-z0-9]+$”
// 只能输入由数字、26个英文字母或者下划线组成的字符串“^w+$”
// 验证用户密码:“^[a-zA-Z]\\w{5,17}$”正确格式为以字母开头长度在6-18之间
//
// 只能包含字符、数字和下划线。
// 验证是否含有^%&,;=?$”等字符:“[^%&,;=?$x22]+”
// 只能输入汉字:“^[u4e00-u9fa5],{0,}$”
// 验证Email地址“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
// 验证InternetURL“^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$”
// 验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”
//
// 正确格式为“XXXX-XXXXXXX”“XXXX-XXXXXXXX”“XXX-XXXXXXX”
//
// “XXX-XXXXXXXX”“XXXXXXX”“XXXXXXXX”。
// 验证身份证号15位或18位数字“^d{15}|d{}18$”
// 验证一年的12个月“^(0?[1-9]|1[0-2])$”正确格式为“01”-“09”和“1”“12”
// 验证一个月的31天“^((0?[1-9])|((1|2)[0-9])|30|31)$” 正确格式为“01”“09”和“1”“31”。
//
// 匹配中文字符的正则表达式: [u4e00-u9fa5]
// 匹配双字节字符(包括汉字在内)[^x00-xff]
// 匹配空行的正则表达式n[s| ]*r
// 匹配HTML标记的正则表达式/< (.*)>.*|< (.*) />/
// 匹配首尾空格的正则表达式:(^s*)|(s*$)
// 匹配Email地址的正则表达式w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
// 匹配网址URL的正则表达式^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$