PHP验证:地址和邮政编码的第一行

PHP验证:地址和邮政编码的第一行,php,validation,Php,Validation,我想用PHP做一些验证(一个邮政地址) 例如,验证地址和邮政编码的第一行: 123 Some Road 及 这两个字段都有数字、字母和空格 我尝试了几种正则表达式模式,但它不接受空格,这就是我需要帮助的地方 以下是我目前使用的代码: $address1CheckPattern = '/^[a-z0-9-]+$/'; $adress1HasError = !preg_match($address1CheckPattern, $address1); 只需将空格放在方括号中,即可在可接受的字符中

我想用PHP做一些验证(一个邮政地址)

例如,验证地址和邮政编码的第一行:

123 Some Road

这两个字段都有数字、字母和空格

我尝试了几种正则表达式模式,但它不接受空格,这就是我需要帮助的地方

以下是我目前使用的代码:

$address1CheckPattern = '/^[a-z0-9-]+$/';

$adress1HasError = !preg_match($address1CheckPattern, $address1);

只需将空格放在方括号中,即可在可接受的字符中包含空格。所以看起来是这样的:

$add_check = '/^[a-zA-Z0-9- ]+$/';
$add_check = '/^[a-zA-Z0-9-. ]+$/';
us=/.../
uk=/.../
nl=/.../
ge=/.../
这就是你要找的吗

请注意,我还在正则表达式中添加了“A-Z”范围:您可能希望允许地址包含大写字母,除非您已经将地址缩减为所有小写或其他形式

我还建议在character类中添加一个点,因为“st.”和“ave.”等缩写可能会出现。那么它看起来是这样的:

$add_check = '/^[a-zA-Z0-9- ]+$/';
$add_check = '/^[a-zA-Z0-9-. ]+$/';
us=/.../
uk=/.../
nl=/.../
ge=/.../

只需将空格放在方括号中,即可在可接受的字符中包含空格。所以看起来是这样的:

$add_check = '/^[a-zA-Z0-9- ]+$/';
$add_check = '/^[a-zA-Z0-9-. ]+$/';
us=/.../
uk=/.../
nl=/.../
ge=/.../
这就是你要找的吗

请注意,我还在正则表达式中添加了“A-Z”范围:您可能希望允许地址包含大写字母,除非您已经将地址缩减为所有小写或其他形式

我还建议在character类中添加一个点,因为“st.”和“ave.”等缩写可能会出现。那么它看起来是这样的:

$add_check = '/^[a-zA-Z0-9- ]+$/';
$add_check = '/^[a-zA-Z0-9-. ]+$/';
us=/.../
uk=/.../
nl=/.../
ge=/.../

这在一般情况下有效。但并非所有地址行1都有编号,有些地址行只有名称。例如房屋名称、街道名称

如果你对你的正则表达式很满意,你只是想让它接受一个空格。在正则表达式中添加一个空格

$add_check = '/^[a-z0-9- ]+$/i';

但这仍然不是匹配地址的好方法。使用从英国皇家邮政获得真实数据的公共API将是最好的。谷歌API(免费但收费有限)或像Postcode anywhere这样的付费服务对您来说会更好

,这在一般情况下是有效的。但并非所有地址行1都有编号,有些地址行只有名称。例如房屋名称、街道名称

如果你对你的正则表达式很满意,你只是想让它接受一个空格。在正则表达式中添加一个空格

$add_check = '/^[a-z0-9- ]+$/i';

但这仍然不是匹配地址的好方法。使用从英国皇家邮政获得真实数据的公共API将是最好的。谷歌API(免费但收费有限)或付费服务(如Postcode anywhere)对您来说会更好

您的正则表达式只包含字母和数字,不提供检查空间或标签 试着遵循正则表达式的工作原理

$add_check = '/^\s*[a-z0-9\s]+$/i';
if(!preg_match($add_check,$address1)) {
    $error_message .= '&add1=Please enter a valid Address Line 1.';
}

您的正则表达式只包含字母和数字,没有检查空格或制表符的规定 试着遵循正则表达式的工作原理

$add_check = '/^\s*[a-z0-9\s]+$/i';
if(!preg_match($add_check,$address1)) {
    $error_message .= '&add1=Please enter a valid Address Line 1.';
}

地址线上的特殊字符呢

在德国,街道名称中通常有一个“-”,或者德语中的“街道”一词用“str”删去,因此在一行中有一个点。当我必须在工作中处理德语地址时,我必须处理诸如“NW 10 Straße 39b”、“Elsa Brandström-Str 128 Haus 3”等行

邮政编码也一样。在德国,我们有5个数字字符-简单,但其他国家也有字母数字字符,如您的示例“W3 1TJ”,等等


所以我要声明,地址行没有常规验证。

地址行中的特殊字符如何

在德国,街道名称中通常有一个“-”,或者德语中的“街道”一词用“str”删去,因此在一行中有一个点。当我必须在工作中处理德语地址时,我必须处理诸如“NW 10 Straße 39b”、“Elsa Brandström-Str 128 Haus 3”等行

邮政编码也一样。在德国,我们有5个数字字符-简单,但其他国家也有字母数字字符,如您的示例“W3 1TJ”,等等


所以我想说,地址行没有一般的验证。

我逐字逐句地回答了这个问题,如果一个地址有一个门牌号,一个空格,然后是一个路名

//address first line [1 pass 3 fails]
$add_check = '/[0-9] [a-zA-Z]/';
echo preg_match($add_check,"123 Some Road");
echo preg_match($add_check,"Some Road");
echo preg_match($add_check,"123Some Road");
echo preg_match($add_check,"2ND Road");
邮政编码有一些字母,一些数字和空格,一些数字,最后还有更多的字母

//UK type postal code [1 pass 3 fails]
$add_check = '/[a-zA-Z][0-9] [0-9][a-zA-Z]/';
echo preg_match($add_check,"W3 1TJ");
echo preg_match($add_check,"W 1TJ");
echo preg_match($add_check,"W3 1");
echo preg_match($add_check,"3 1TJ");
当然,如果我不是住在“路一号”,而是住在“我的房子,路一号”。
哎哟,那个逗号怎么办,数字怎么了。现在可能是将validateAddressLine($address)放入函数中的好时机,以便以后可以对其进行改进。并在每次为false时保存一条日志消息,然后您可以检查是否阻止了某些您不期望的格式。[这也意味着你不应该对html验证太严格,让服务器检查并记录它。]

我逐字逐句地回答了这个问题,如果一个地址有门牌号、空格、道路名称

//address first line [1 pass 3 fails]
$add_check = '/[0-9] [a-zA-Z]/';
echo preg_match($add_check,"123 Some Road");
echo preg_match($add_check,"Some Road");
echo preg_match($add_check,"123Some Road");
echo preg_match($add_check,"2ND Road");
邮政编码有一些字母,一些数字和空格,一些数字,最后还有更多的字母

//UK type postal code [1 pass 3 fails]
$add_check = '/[a-zA-Z][0-9] [0-9][a-zA-Z]/';
echo preg_match($add_check,"W3 1TJ");
echo preg_match($add_check,"W 1TJ");
echo preg_match($add_check,"W3 1");
echo preg_match($add_check,"3 1TJ");
当然,如果我不是住在“路一号”,而是住在“我的房子,路一号”。
哎哟,那个逗号怎么办,数字怎么了。现在可能是将validateAddressLine($address)放入函数中的好时机,以便以后可以对其进行改进。并在每次为false时保存一条日志消息,然后您可以检查是否阻止了某些您不期望的格式。[这也意味着你不应该对html验证要求太严格,让服务器检查并记录它。]

不完全回答这个问题,但我曾经有过验证邮政编码的任务

为此,我建立了以下正则表达式;希望有帮助

正如一些人在我之前所说的,没有办法验证某个国家的每个地址,更不用说在这个星球上了!它必须是一个通用文本字段,可能只需检查您不需要的字符:“?=;@$%^*!”并清理输入以避免SQL注入

在我的应用程序中,邮政编码是根据国家/地区字段进行测试的,但如果您知道您将只测试选定的几个字段,则可以将一些字段组合在一起 例如:美国/英国=
/^([\d]{5}([\d]{4}))|([A-Z]?[A-Z][0-9][A-Z0-9]?\s[0-9][A-Z]{2})/


不完全回答这个问题,但我曾经有过验证邮政编码的任务

我建立了以下re