我在嘗試弄清楚如何解析從用戶收集的信息時遇到了一些麻煩。我收集的信息是:以任何順序或格式解析用戶的輸入
- 年齡
- 性別
- 郵編
下面是我如何可以接收來自用戶的一些例子:
- 30男90250
- 30/M/90250
- 30男90250
- 男性30例90250
- 30-M-90250
- 90250,男,30
我開始了與爆炸的功能,但我留下了一個巨大的,如果else語句列表試圖看看用戶如何分離信息(是空格還是逗號或斜線或傳說)
任何反饋表示讚賞。
謝謝
我在嘗試弄清楚如何解析從用戶收集的信息時遇到了一些麻煩。我收集的信息是:以任何順序或格式解析用戶的輸入
下面是我如何可以接收來自用戶的一些例子:
我開始了與爆炸的功能,但我留下了一個巨大的,如果else語句列表試圖看看用戶如何分離信息(是空格還是逗號或斜線或傳說)
任何反饋表示讚賞。
謝謝
這很容易。郵政編碼總是5位數,所以一個簡單的正則表達式匹配/\d{5}/
將工作得很好。年齡是從1到3位數字的數字,所以/\d{1,3}/
負責。至於性別,你可以找f
female
,如果沒有一個假設male
。
說了這麼多,單獨的輸入字段有什麼問題?
不準確,美國的郵政編碼有兩種已知格式之一:XXXXX或XXXXX-XXXX。那只是在美國。在其他國家,它可以包含字符,空格,不同長度等。 – alfasin
第二個正則表達式失敗;如果輸入是90210 16 M,年齡將匹配902. – WhyNotHugo
@ Hugo - 嗯,'/ \ d {1,3} /'當然假定您已經識別輸入字符串中的郵政編碼,刪除它,或者在未被識別爲郵政編碼的輸入部分上操作。 – nickb
您可能需要使用一些正則表達式:
[^\d]\d{5}[^\d]
[^\d]\d{2}[^\d]
[a-zA-Z]
[編輯]
我編輯了RegExes。他們現在匹配每個提出的替代方案,並且不需要對輸入字符串進行任何更改(這使得它成爲更有效的選擇)。它們也可以以任何順序運行。
這些正則表達式「如何正確完成」? '\ s' [只匹配](http://us3.php.net/manual/en/regexp.reference.character-classes.php)匹配HT,LF,FF,CR和空格,第二,第五,OP中的第六個示例沒有包含這些郵政編碼或年齡的字符。 – nickb
@nickb那麼您推薦使用哪種解決方案? – Adil
@nickb我已經更新了我的答案。 – WhyNotHugo
你不能執行一個格式嗎?單獨的輸入?什麼? – MDrollette
不幸的是,這不是一個選項 – Adil