2016-06-28 77 views
1

所以,昨天我問一個問題,看看如果有可能從一個字符串中刪除無效字符,只保留了幾個有效問卷爲一個數字格式化(Removing (nearly) all non-numeric characters from a string返回錯誤,並在特定的字符輸入警告

的答案是例外,它的工作很好。但我一直在想它,只是刪除無效字符不是正確的做法。我不能簡單地假設輸入的其他角色確實是正確的,最好的做法是提出錯誤。

我不知道我怎麼會去,如果任何字符不是在我的$ sAllowedValues可變提到引發錯誤輸入

感謝所有幫助!

的代碼驗證允許哪些字符

$sAllowedValues = "/\+?[0-9 EeXxTt]*/"; 
    preg_match_all($sAllowedValues, $sNumber, $sMatches); 
    var_dump($sMatches); 
+0

究竟是什麼問題?您可以將原始輸入與匹配內容進行比較,以查看是否有任何更改;如果在輸入中有非法字符。 – jeroen

回答

1

只需添加字符串匹配的開始和結束的片段:^$。這樣,只有當整個字符串由有效字符組成時,匹配纔會成功

$sNumber = 'a24432'; 

$sAllowedValues = "/^\+?[0-9 EeXxTt]*$/"; 
$res = preg_match($sAllowedValues, $sNumber, $sMatches); 
var_dump($res); // 1 - OK, 0 - there are invalid chars 
+0

這工程太棒了!我不知道正則表達式是如何工作的。從來沒有設法讓我的頭在他們周圍!謝謝! –

+0

只需在[regex101](https://regex101.com/)上用簡單的regexp-s播放一段時間,看看結果如何變化 –

+0

我還有一個小小的請求,我該怎麼去允許一個' +'通過,但只有當它在第一個位置?同樣這也是可選的,因爲人們被允許以0開始他們的輸入?這可以做到還是很複雜? –