5

For example I have following string, which will be given as input from a user:

string str = "0-00:03"

Inside my contract I would like to check that:

  • str[1] should be -
  • str[4] should be :
  • and the remaining characters have to be numeric value.

This operation is easy to do C where with pointer I can iterate each character and check its char value. But I was not able to operate this inside my contract under Solidity language.

1 Answer 1

5

Just cast the string to bytes

function testStr(string str) constant returns (bool) {
    bytes memory b = bytes(str);
    if (b.length != 7)
        return false;
    for (uint i; i < 7; i++) {
        if (i==1) {
            if(b[i] != 45) return false;
        }
        else if (i == ) {
            if(b[i] != 58) return false;
        }
        else if(b[i] < 48 || b[i] > 57)
            return false;
    }
    return true;
}
2
  • Thank you. Also for example when it pass the test, I would like to convert "03" into a uint32 variable. The thing come to my mind is: 0*10 + 3*1 <= 3. So can I do something like: (b[i] - 48) * 10 and cast result into uint32?@Tjaden Hess
    – alper
    Commented Apr 10, 2017 at 22:30
  • 1
    Sounds about right Commented Apr 10, 2017 at 23:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.