2013-10-27 35 views
3

我想弄清楚前一個匹配街道地址。街道地址的格式必須是2或3位數字,後跟街道名稱的文本字符串,然後以「街道」或「道路」結尾。PHP Reg Ex如何preg_match在街道地址準確2或3位數字

因此,一個有效的地址可以是:

  • 12假街
  • 12假貨路
  • 123假冒街
  • 123假路

無效的地址是:

  • 1假冒街
  • 1假路
  • 1234假街
  • 1234假路


preg_match("/^[0-9]{2,3} *[a-zA-Z] *(Street|Road)$/", $_POST['street']) 

我試過多種方法可以解決這個並不能讓數字正常工作。 如果我嘗試/^[0-9]{2,3}$/它自行工作,但是當我添加字符串表達式時,它會混淆它。同樣使用沒有^或$的公式,它將驗證超過3位數字的任何數量的數字。所以1234,12345等將會起作用。

+0

爲什麼「1假街」在你眼中無效?就此而言,爲什麼四位數字不可接受? –

+0

@NiettheDarkAbsol該號碼必須是正好2或3位數字(第二句)。 – ComFreek

+0

@ComFreek但爲什麼?地址可以有任意數量的數字... –

回答

1

您沒有正確的正則表達式匹配第一個數字後到來街道名稱,因爲[a-zA-Z]將匹配單個字母只

使用這個表達式:

preg_match("/^[0-9]{2,3} +[a-zA-Z]+ +(Street|Road)$/", $_POST['street']); 

不同的是[a-zA-Z]+,而不是[a-zA-Z]

PS:也改爲+而不是*,因爲至少需要1個空格補間這些組件。

+0

它的工作,非常感謝你。 – khmer2040

+0

不客氣,很高興它爲你工作。 – anubhava