2012-11-06 80 views
-1

這段代碼取自codeigniter,我試圖將其複製到允許數字字符和破折號的新函數中。我需要添加到這個正則表達式以允許破折號和括號?如何在此正則表達式中包含短劃線

preg_match('/^[\-+]?[0-9]*\.?[0-9]+$/', $str); 
+0

將它們添加到字符類? *另請參閱[開源RegexBuddy替代品](http://stackoverflow.com/questions/89718/is-there)和[在線正則表達式測試](http://stackoverflow.com/questions/32282/regex-testing)for一些有用的工具,或[RegExp.info](http://regular-expressions.info/)一個更好的教程。 – mario

回答

1
preg_match('/^\+?[-0-9]*\.?[-0-9]+$/', $str); 

更新:

preg_match('/^\+?[-0-9()]*\.?[-0-9()]+$/', $str); 
+0

我更新了問題以允許括號。你能更新你的答案嗎? – Catfish

+0

已更新。不知道在括號中需要在哪個位置,'$ str'的​​一些例子會搖擺。 – nkamm

+0

我試圖讓用戶輸入多種格式的電話號碼,包括'555-555-5555'或'(555)555-555'。 – Catfish

2

你的正則表達式含義: 開始行用 - 或+ MAYBE 然後0-9零次或多次 然後一個。 MAYBE 然後以以下數字中的至少一個結束:0-9

您需要指定要RegEx執行的操作,然後有人可以編寫正確的RegEx。

編輯 在這裏你去:

<?php 

// 555-555-5555 or (555) 555-5555 or (555)555-5555 
$str = '555-555-5555'; 
if (preg_match('/^((\([0-9]{3}\)) ?|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/', $str) == 1){ 
    echo 'Yes!'; 
}else{ 
    echo 'No!'; 
} 
?> 
+0

問題中發佈的代碼是直接從form_validation類中的codeigniter函數「Numeric」中獲取的。我只是想給它添加破折號和括號,以便它們也被允許。 – Catfish

+0

@Catfish,您標記爲正確的答案允許使用+ - - )(0'這看起來像任何人的電話號碼嗎? – keyboardSmasher

+0

對我的應用程序來說沒關係,因爲我除了數字之外的任何東西都可以將它插入數據庫。輸入多種格式 – Catfish

相關問題