ukui-clock/fieldvalidutil.cpp

438 lines
12 KiB
C++
Raw Normal View History

2022-06-08 13:42:09 +08:00
/*
* 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-./?%&=]*)?$