2013-05-25 45 views

回答

6

說明

這個表達式將確保你有1個或多個大寫,小寫,或串hypens的無空白

^[A-Za-z\\-]{1,}$

enter image description here

匹配模式說明:

(^[A-Za-z\\-]{1,}$)

匹配如下:

(

^字符串

[A-Za-z\\-]{1,}的任何字符的起始位置: 'A' 到 'Z', 'a' 到 'Z',「\ 」, ' - '(至少1次(匹配的最可能的量))

可選之前\ n $和字符串的末尾

分組

PHP代碼示例的

)結束:

<?php 
$sourcestring="zREBsZtyvw"; 
preg_match_all('/^[A-Za-z\\-]{1,}$/i',$sourcestring,$matches); 
echo "<pre>".print_r($matches,true); 
?> 

$matches Array: 
(
    [0] => Array 
     (
      [0] => zREBsZtyvw 
     ) 

) 
+2

我看了一下你的個人資料。你的正則表達式的答案是非常徹底的。感謝您在模式匹配方面非常熟悉,我很欣賞這種努力。 – meiryo

+0

謝謝你的客氣話。我真的很喜歡接受這些挑戰,並讓他們容易理解:) –

+0

請使用'+'而不是'{1,}'。 –

2

是,使用錨(^$),以指定的字符串開始結束只有那些字符:

print_r(preg_match("/^[A-Za-z\\-]$/", $str)); 
        ^  ^
+0

我得到這樣的警告:'警告:的preg_match():沒有結束符 '^' found' – meiryo

+0

@meiryo啊,我忘了的preg_match ()在正則表達式之前和之後需要斜槓。我對此並不熟悉。見編輯的答案。 – Jerry

1

其實 - 你缺少轉義字符(/)在開始和你的模式結束, 和你使用[]這組只有一個字符匹配

最佳方式是使用重複和啓動/ E第二錨

「/^[A-ZA-Z - ] * $ /」

的print_r(的preg_match( 「/^[A-ZA-Z - ] * $ /」,$ STR));

+0

這工作,但它仍然採取0-9並返回true。 – meiryo

+0

對不起 - 我的瀏覽器只是欺騙我發送未完成的,所以我編輯...這應該工作。 - 同時,Barmar也寄出類似的東西 – YomY

3

Jerry和Yomy各自發現了一半的問題。這裏的整體解決方案:

print_r(preg_match("/^[A-Za-z\\-]*$/", $str)); 

preg_match需要你有在正則表達式的開頭和結尾匹配的分隔符。而且您需要錨定正則表達式,以便檢查整個字符串,而不僅僅是在強壯的任何地方查找匹配。而且您需要使用*通配符來匹配任意數量的字符。

0

沒有必要爲一個雙反斜線..但你還需要分隔符在正則表達式的開始和結束(/人的)

print_r(preg_match("/^[A-Za-z\-]+$/", $str)); 

我用的,而不是+ *爲你「 d要匹配1個或更多。用*表示一個空字符串。

相關問題