I wrote a regex for php function pregmatch which is like this:
^([a-zA-Z]){4}([a-zA-Z]){2}([0-9a-zA-Z]){2}([0-9a-zA-Z]{3})?$^
Now I need to check the consistency of an BIC string.
Something is wrong with it... it is always correct. And I have no idea why.
The code I use is something like this:
/**
* Checks the correct format from the
* @param string $bic
* @return boolean
*/
public function checkBic($bic)
{
$bic = $this->cleanFromSeparators($bic);
if (preg_match($this->getBicCompare(), $bic)) {
return true;
} else {
return false;
}
}
private function getBicCompare()
{
return "^([a-zA-Z]){4}([a-zA-Z]){2}([0-9a-zA-Z]){2}([0-9a-zA-Z]{3})?$^";
}
EDIT:
Here are some references for BIC format from the swift account:
http://www.sage.co.uk/sage1000v2_1/form_help/workingw/subfiles/iban_and_bic.htm
http://en.wikipedia.org/wiki/ISO_9362
http://www.swift.com/products_services/bic_and_iban_format_registration_bic_details?rdct=t
an example BIC would be:
NOLADE21STS
OPSKATWW
The regex should only return true if the string consists of the following code: its length is eight or eleven characters and that consists of:
Bank code - 4 alphabetic characters Country code - 2 letters Location code - 2 alphanumeric characters, except zero Branch code - 3 alphanumeric characters
These are the specifications.
So the length can be either 11 or 8, first 4 can be anything, then 2 letters is a must, then 2 numbers and optional 3 alphanumeric.
The following are not valid:
abcdefxx
abcdefxxyyy
These also are not valid:
aaaa11xx
aaaa11xxyyy
and so on.
You are using ^
as delimiter? You probably want something more like:
'/^[a-z]{6}[0-9a-z]{2}([0-9a-z]{3})?\z/i'