c++中文字符匹配,但不匹配中文标点的完美解决方案。

一、需求

  1. 命名规则:0-9 a-z 不能反斜杠,长度限制(30)
  2. 1. Project命名规则
  3. 1. 可以包含:
  4. 1. 汉字,
  5. 2. 字母(区分大小写),
  6. 3. "_"(英文下划线),
  7. 4. “-”(英文破折线),
  8. 5. “.”(英文点);
  9. 7. 数字
  10. 2. 长度:30个字符;

二、实现

正则表达式会先匹配 1 个字符,再匹配 0 - 29 个字符,实际就是30个字符限制。

#include <iostream>
#include <regex>
#include <locale>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

std::wstring transformString2Wstring(const std::string &s)
{
    setlocale(LC_CTYPE, "en_US.UTF-8");
    const char *_Source = s.c_str();
    size_t len = strlen(_Source) + 1;
    size_t converted = 0;
    wchar_t *wStr = new wchar_t[len];
    mbstowcs_s(&converted, wStr, len, _Source, _TRUNCATE);
    std::wstring result(wStr);
    delete[] wStr;
    return result;
}

int main() {
     std::wstring pattern{L"^[\u4E00-\u9FA5A-Za-z0-9][\u4E00-\u9FA5A-Za-z0-9_\\-\\.]{0,29}$"};
     std::wregex re(pattern);
     std::string test_str = "你啊23zs.-_s";
     bool ret = std::regex_match(transformString2Wstring(test_str), re);
     if (!ret) {
           std::cout << "not match \n"; 
     }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值