2012-06-30 35 views
0

我在嘗試弄清楚如何解析從用戶收集的信息時遇到了一些麻煩。我收集的信息是:以任何順序或格式解析用戶的輸入

  • 年齡
  • 性別
  • 郵編

下面是我如何可以接收來自用戶的一些例子:

  • 30男90250
  • 30/M/90250
  • 30男90250
  • 男性30例90250
  • 30-M-90250
  • 90250,男,30

我開始了與爆炸的功能,但我留下了一個巨大的,如果else語句列表試圖看看用戶如何分離信息(是空格還是逗號或斜線或傳說)

任何反饋表示讚賞。

謝謝

+2

你不能執行一個格式嗎?單獨的輸入?什麼? – MDrollette

+0

不幸的是,這不是一個選項 – Adil

回答

2

這很容易。郵政編碼總是5位數,所以一個簡單的正則表達式匹配/\d{5}/將工作得很好。年齡是從1到3位數字的數字,所以/\d{1,3}/負責。至於性別,你可以找ffemale,如果沒有一個假設male

說了這麼多,單獨的輸入字段有什麼問題?

+0

不準確,美國的郵政編碼有兩種已知格式之一:XXXXX或XXXXX-XXXX。那只是在美國。在其他國家,它可以包含字符,空格,不同長度等。 – alfasin

+0

第二個正則表達式失敗;如果輸入是90210 16 M,年齡將匹配902. – WhyNotHugo

+0

@ Hugo - 嗯,'/ \ d {1,3} /'當然假定您已經識別輸入字符串中的郵政編碼,刪除它,或者在未被識別爲郵政編碼的輸入部分上操作。 – nickb

2

您可能需要使用一些正則表達式:

  • 一個看起來爲5位數字:[^\d]\d{5}[^\d]
  • 一個看起來2個數字:[^\d]\d{2}[^\d]
  • 一個看起來爲單信:[a-zA-Z]

[編輯]

我編輯了Re​​gExes。他們現在匹配每個提出的替代方案,並且不需要對輸入字符串進行任何更改(這使得它成爲更有效的選擇)。它們也可以以任何順序運行。

+0

這些正則表達式「如何正確完成」? '\ s' [只匹配](http://us3.php.net/manual/en/regexp.reference.character-classes.php)匹配HT,LF,FF,CR和空格,第二,第五,OP中的第六個示例沒有包含這些郵政編碼或年齡的字符。 – nickb

+0

@nickb那麼您推薦使用哪種解決方案? – Adil

+0

@nickb我已經更新了我的答案。 – WhyNotHugo