检查字符串是否为 int 的函数不起作用

function to check whether a string is an int not working

我一直在创建一个程序来检查 phone 号码是否有效,如果 phone 号码以“04”开头但长度为十个字母,我的程序将返回 true。以下是检查字符串是否为无符号整数的函数代码:

bool Is_Int(string phone) {
    if (all_of(phone.begin(), phone.end(), ::isdigit)) {
        return true;
    } else {
        return false;
    }
}

这是检查 phone 号码是否有效的代码:

bool Is_Valid(string phone) {
    if (phone.length() == 10 && phone.substr(0,2) == "04" || phone.substr(0,2) == "08" && Is_Int(phone)) {
        return true;
    } else {
        return false;
    }
}

这是主要程序代码:

int main()
{
    cout << "Enter Phone Number: ";
    string PhoneNumber;
    getline(cin, PhoneNumber);
    if (Is_Valid(PhoneNumber)) {
        cout << "authenticated" << endl;
    }
    return 0;
}

错误是,如果我输入“04abcdefgh”,它会打印 authenticated

做两个括号。 &&|| 之前求值,因此如果 phone.length() == 10 && phone.substr(0,2) == "04" 为真

则 if 为真
bool Is_Valid(string phone) {
    if (phone.length() == 10 && (phone.substr(0,2) == "04" || phone.substr(0,2) == "08") && Is_Int(phone)) {
        return true;
    } else {
        return false;
    }
}

像评论中提到的rakete1111函数可以简化为:

bool Is_Valid(string phone) {
    return (phone.length() == 10 && (phone.substr(0,2) == "04" || phone.substr(0,2) == "08") && Is_Int(phone));
}

也许,正则表达式更清楚?

bool Is_Valid(string phone) {
  return QRegularExpression(R"(^0(4|8)\d{8}$)").match(phone).hasMatch();
}
  1. 字符必须是 0
  2. 字符可能是 4 或 8
  3. 最后8位