少し驚いたが、次の...
static public function VerifyAndFormatStreet(&$addrStr, $mustExist)
{
if( $addrStr !== NULL )
{
$addrStr = trim($addrStr);
// SNIP
if( preg_match('/[^A-Za-z0-9 -.,]/', $addrStr) )
{
printf("\t### FAIL: BAD CHARS\n");
throw new JEH_IllegalParameterException("Address contains illegal characters");
}
$addrStr = ucwords(strtolower($addrStr));
printf("PASS STRING IS NOW $addrStr\n");
}
else if($mustExist)
throw new JEH_IllegalParameterException("Address must not be empty");
}
次の呼び出しは、無効な文字の検出に失敗します$street2
...
$pass = FALSE;
try { JEH_Address::Create("12 Somestreet", "Junk£", "Frlington", "", "Portsmouth", "Hampshire", "UK", "PO1 1XX"); }
catch(JEH_IllegalParameterException $e) { $pass = TRUE; }
if( !$pass ) die("Was able to detect bad char!!!\n");
else printf("PASS\n");
しかし、preg_match()
関数内で関数を次のように変更するとCreate()
... (セットの最後にスペースを入れます)
if( preg_match('/[^A-Za-z0-9-., ]/', $addrStr) )
機能は動作します。
文字一致セットでスペースを移動するとうまくいく理由はありますか?