Home > Net >  startsWith Case sensitive
startsWith Case sensitive

Time:08-16

Can't find a solution to this which seems simple enough. I have user input field and want to check the user has prefixed the code asked for with an S (example code S123456 so I want to check to make sure they didn't just put 123456).

// Function to check string starting with s

if (isset($_REQUEST['submitted'])) { $string=$_POST['required_code'];function startsWith ($string, $startString){$len = strlen($startString);return (substr($string, 0, $len) === $startString);
}
  
// Do the check 
if(startsWith($string, "s"))echo "Code starts with a s";else echo "Code does not start with a s";}

The problem is if the user inputs an upper case S this is seen as not being a lower case s.

So I can get round this using

$string = strtolower($string);

So if the user inputs an uppercase S it gets converted to lower case before the check. But is this the best way? Is there not someway to say S OR s? Any suggestions?

CodePudding user response:

What you could do instead of creating your own function, is using stripos. Stripos tries to find the first occurrence of a case-insensitive substring.

So as check you could have:

if(stripos($string, "s") === 0)

You need 3 equal signs, since stripos will return false (0) if it can't find the substring.

CodePudding user response:

Take your pick; there are many ways to see if a string starts with 'S'. Some of them case-sensitive, some not. The options below should all work, although I wouldn't consider any of them better than your current solution. stripos() is probably the 'cleanest' check though. If you need multibyte support, there's also the mb_stripos() variant.

(Although; keep in mind that stripos() can also return false. If you're going with that option, always use the stricter "identical" operator ===, instead of == to prevent type juggling.)

if (stripos($string, 's') === 0) {
    // String starts with S or s
} else {
    // It does not
}
if (str_starts_with($string, 's') || str_starts_with($string, 'S')) // ...
if (in_array(substr($string, 0, 1), ['S', 's'], true)) // ...
if (preg_match('/^s/i', $string)) // ...
// Many other regexp patterns also work
  • Related