2017-05-03 25 views
1

我用正则表达式给出的格式地址PHP正则表达式格式的地址

$address='2/12, 1st street, ch-90'; 
(preg_match('/^[a-zA-Z0-9\s #,-.]+$/i', $address)) 

PLS建议我加入pregmatch的forward slash它匹配上述地址。由于

+0

有两种方法是可能的:1)选择其他模式分隔符2)使用反斜杠转义斜线。请注意,您还应该在字符类中跳过连字符,因为它定义了逗号和点之间的范围(但实际上这不是问题,因为逗号,连字符和点在ascii表中是连续的) –

回答

1

试试这个希望这将帮助你......

您应该添加\/到字符类匹配/,你必须在字符类的末尾添加-

<?php 

ini_set('display_errors', 1); 
$address='2/12, 1st street, ch-90'; 
preg_match('/^[a-zA-Z0-9\/\s #,.-]+$/i', $address,$matches); 
print_r($matches); 

输出:

Array 
(
    [0] => 2/12, 1st street, ch-90 
) 
+0

谢谢。它适用于我 – pabha

+0

@pabha欢迎.... :) –

0

我想提供一些正则表达式的建议,一些邮政地址使用注意事项,以及一些输出忠告:

模式建议

如果你要使用i标志哟结束UR模式表达式,那么你就需要在你的角色列表中输入了两个a-zA-Z - 只需选择一个范围。

除非你期待任何\r\n\t\f\v空格字符,你应该只使用在你的角色列表中的空间()。

我会假设你已经认为你会在你的项目,并通过添加一个转义斜杠(\/),你将至少能够从preg_match()返回true结果您输入的字符串遇到可能的符号( $address)。

邮政地址使用注意事项

处理地址字符串可以变成一个真正的兔子洞。要做的最好的事情是建立一些严格的指导方针(如果您有权这样做),这会限制存在于有效地址中的格式和字符。如果您无法控制输入字符串,那么您可能需要扩展正则表达式以包含更多符号。根据项目的深度和复杂程度,这个主题将需要不同的研究。

1.4.3建议

如果你只是想要一个合格与否的条件,不preg_match()声明第三个参数:如果要找出失败的字符

$address='2/12", 1st street, @ch-90'; // <-- I added invalid symbols to your string 

if(preg_match('/^[a-z\d \/#,.-]+$/i',$address)){ 
    echo "Address is valid"; 
    // do whatever is next and use unchanged $address 
}else{ 
    echo "Address contains invalid character(s)"; // <-- this one will be shown 
    // do whatever is next and use unchanged $address 
} 

(S ),使用preg_match_all(),更改模式,并声明第三个参数。这可以提供更好的用户体验,因为您正在解释导致地址值无效的原因。也就是说,如果您使用这种模式来保护您的网站免受恶意攻击,那么当然,您不希望提供这些线索。这是preg_match_all()方法:

if(preg_match_all('/[^a-z\d \/#,.-]/',$address,$m)){ 
    echo "Address deemed invalid because of: ",implode("",$m[0]); // or however you want to display it 
    // do whatever is next 
}else{ 
    echo "Address is valid"; 
    // do whatever is next 
}