2016-11-06 65 views
-5

需要正則表達式的幫助。php正則表達式

我有一個html表單來接受牌照,生日和社會保險號碼的輸入。我有一個php腳本,使用preg_match()函數在輸入中讀取。我似乎不能得到這些3 preg_match功能與下面發佈的例子。

車牌:格式LLLDDDDDDLLLL =字母; D =數字),有可能是零或字母和數字之間的一個空間。

所有這些都是有效的:

  1. ABC123
  2. 123ABC
  3. ABC 123
  4. 123 ABC

生日:格式MMM­DD­YYYYMMM三個字母; DDYYYY是數字。

所有這些都是有效的:

  1. JAN-01-2002
  2. MAY-30-1933

社會保險號碼:9位;每個組的三個

後可以有零個或多個空格所有這些都是有效的:

  1. 111 222 333
  2. 111 22233

PHP腳本:lab11.php

<?php 
    // Get license plate, birthday and 
    // social insurance number entered from lab11.html form 

    $licensePlate = $_POST['licensePlate']; 
    $birthday = $_POST['birthday']; 
    $socialInsuranceNumber = $_POST['socialInsuranceNumber']; 

echo "<br>"; 
    // Validate regular expression for license plate entered 
    if (preg_match("/^(\([\d]{3}\)|[\d]{3})?(-|\s*)?([\d]{3})?(-|\s*)?[\d]{3}(-|\s*)?[\d]{4}$/", $licensePlate)) 
    { 
     echo "The license plate you entered is " . $licensePlate . "."; 
    } 
    else 
    { 
     echo "The license plate you entered is incorrect."; 
    } 
    echo "<br>"; 
    // Validate regular expression for birthday entered 
    if (preg_match("/^(\([\d]{3}\)|[\d]{3})?(-|\s*)?([\d]{3})?(-|\s*)?[\d]{3}(-|\s*)?[\d]{4}$/", $birthday)) 
    { 
     echo "Your birthday is " . $birthday . "."; 
    } 
    else 
    { 
     echo "Your birthday is incorrect."; 
    } 
    echo "<br>"; 
    // Validate regular expression for social insurance number entered 
    if (preg_match("/^(\([\d]{3}\)|[\d]{3})?(-|\s*)?([\d]{3})?(-|\s*)?[\d]{3}(-|\s*)?[\d]{3}$/", $socialInsuranceNumber)) 
    { 
     echo "The social insurance number you entered was " . $socialInsuranceNumber . "."; 
    } 
    else 
    { 
     echo "The social insurance number you entered is incorrect."; 
    } 
?> 
+0

爲什麼要使用所有這三個輸入相同的正則表達式?你寫了那個正則表達式嗎?在你的輸入中似乎並不需要'()'。這是牌照,'^([AZ] \ s?){3}(\ d \ s?){3} |( \ d \ S'){3}([AZ] \ S'){3} $'。元字符不需要在字符類中,'\ d'是一個數字,而不是字母。 – chris85

+0

我想生日會像他一樣:'^(JAN | FEV | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC) - \ d {2} - \ d {4} $' –

+0

我需要幫助的最後一件事是如何在社會保險號碼的每個3位數字分組之間顯示超過1個空格。例如,如果您輸入:「111 333222」,我希望它以類似的方式顯示,它將顯示如下:「111 333222」 – user7123308

回答

1

對於車牌,使用以下命令:

if (preg_match("/^[a-zA-Z]{3}\s*[0-9]{3}|[0-9]{3}\s*[a-zA-Z]{3}$/", $licensePlate)) 

對於生日,使用以下命令:

if (preg_match("/^(?i)(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d{2}-\d{4}$/", $birthday)) 

社會保險號碼,使用以下命令:

if (preg_match("/^\d{3}\s*\d{3}\s*\d{3}$/", $socialInsuranceNumber)) 

更新:

如果你想在社會保險號碼,顯示空格,你可以使用str_replace機能的研究,如下:

if (preg_match("/^\d{3}\s*\d{3}\s*\d{3}$/", $socialInsuranceNumber)) 
{ 
    $socialInsuranceNumber = str_replace(" ","&nbsp;", $socialInsuranceNumber); 
    echo "The social insurance number you entered was " . $socialInsuranceNumber . "."; 
} 
+0

仍然無法在社會保險號碼的每個3位數字組之間顯示超過1個空白如果這是用戶輸入的內容。例如,如果您輸入:「111 333222」,我希望它能像這樣顯示:「111 333222」 – user7123308

+0

@ user7123308我更新了代碼以顯示空格。 – Ibrahim

+0

@Ibrahim不需要所有這些'JAN | jan | FEB | feb ...',使用'i'修飾符將處理字母大小寫。在這裏只是一個旁註;-) –

1

對於社會安全號碼,你可以刪除所有字符,但0 -9通過使用preg替換,然後檢查字符串長度是9.

對於日期使用datetime對象和使用創建格式

http://php.net/manual/en/datetime.createfromformat.php

用於汽車板。首先使用2個正則表達式。一個字母持續它將使維持性也更容易

正則表達式,而它可能做的所有3它不是真正合適的工具