我已經試過:檢查一個字符串只包含A-Z,A-Z和 - (破折號)字符使用的preg_match
print_r(preg_match("[A-Za-z\\-]", $str));
而且我越來越假。我不是很擅長正則表達式,但它似乎工作http://regexpal.com/
我在這裏錯過了什麼嗎?
編輯: 例如$str = zREBsZtyvw
我已經試過:檢查一個字符串只包含A-Z,A-Z和 - (破折號)字符使用的preg_match
print_r(preg_match("[A-Za-z\\-]", $str));
而且我越來越假。我不是很擅長正則表達式,但它似乎工作http://regexpal.com/
我在這裏錯過了什麼嗎?
編輯: 例如$str = zREBsZtyvw
這個表達式將確保你有1個或多個大寫,小寫,或串hypens的無空白
^[A-Za-z\\-]{1,}$
(^[A-Za-z\\-]{1,}$)
匹配如下:
(
組
^
字符串
[A-Za-z\\-]{1,}
的任何字符的起始位置: 'A' 到 'Z', 'a' 到 'Z',「\ 」, ' - '(至少1次(匹配的最可能的量))
可選之前\ n $
和字符串的末尾
)
結束:
<?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
)
)
Jerry和Yomy各自發現了一半的問題。這裏的整體解決方案:
print_r(preg_match("/^[A-Za-z\\-]*$/", $str));
preg_match
需要你有在正則表達式的開頭和結尾匹配的分隔符。而且您需要錨定正則表達式,以便檢查整個字符串,而不僅僅是在強壯的任何地方查找匹配。而且您需要使用*
通配符來匹配任意數量的字符。
沒有必要爲一個雙反斜線..但你還需要分隔符在正則表達式的開始和結束(/人的)
print_r(preg_match("/^[A-Za-z\-]+$/", $str));
我用的,而不是+ *爲你「 d要匹配1個或更多。用*表示一個空字符串。
我看了一下你的個人資料。你的正則表達式的答案是非常徹底的。感謝您在模式匹配方面非常熟悉,我很欣賞這種努力。 – meiryo
謝謝你的客氣話。我真的很喜歡接受這些挑戰,並讓他們容易理解:) –
請使用'+'而不是'{1,}'。 –