2009-10-15 55 views
0

我需要一個簡單的正則表達式來驗證形式爲xy的電話號碼,其中x和y可以表示任意數量的數字,並且短劃線是可選的,但是如果它確實顯示它最在字符串內(短劃線必須在其左側和右側有數字)單一的儀表板電話號碼 - 正則表達式驗證

+1

也許張貼你有什麼這麼遠嗎? – Dana 2009-10-15 20:42:49

回答

6

/^\d+(?:-\d+)?$/應該做的伎倆。

+0

「1foobar」將被匹配,你應該限制字符串的開始和結束^ ... $ – CMS 2009-10-15 20:50:40

+0

@CMS:可能是真實的,儘管iulianchira可能希望將它合併到更大的正則表達式中。調整了答案。 – moonshadow 2009-10-15 20:54:21

1

/^ \ d +( - \ d +)?$ /)似乎工作。它匹配一個或多個前導數字,並帶有可選的「連字符後跟一個或多個數字」。

#!/usr/bin/perl 
# 
@A = ("1-2", 
     "-12", 
     "12-", 
     "123-1234", 
     "1-", 
     "-1", 
     "123", 
     "1", 
     "foo-bar", 
     "12foo34", 
     "foo12-34", 
     "12f-o34", 
     ); 

foreach (@A) { 
    if (/^\d+(-\d+)?$/) { 
    print "\"$_\" is a phone number\n"; 
    } else{ 
    print "\"$_\" is NOT a phone number\n"; 
    } 
} 

給出:

$ ./phone.pl 
"1-2" is a phone number 
"-12" is NOT a phone number 
"12-" is NOT a phone number 
"123-1234" is a phone number 
"1-" is NOT a phone number 
"-1" is NOT a phone number 
"123" is a phone number 
"1" is a phone number 
"foo-bar" is NOT a phone number 
"12foo34" is NOT a phone number 
"foo12-34" is NOT a phone number 
"12f-o34" is NOT a phone number