2012-06-15 70 views
1

我想检查一个字符串只允许a-z A-Z 0-9 ./? &,但我不确定如何使用preg_match()。php preg_match或preg_replace验证

如果您还可以解释代码的每个部分是我会感激它! (即你为什么添加/^以及如何添加一个/

感谢

回答

4

这就是:

$input = 'Hello...?World'; 
$regex = '~^[a-z0-9&./?]+$~i'; 

if (preg_match($regex, $input)) { 
    echo "yeah!"; 
} 

你可以建立自己的字符类和验证字符串这样。

说明:

~ 
^      # string start 
[      # start character class 
    a-z     # letters from a to z 
    0-9     # digits from 0 to 9 
    &./?     # &,.,/ and ? chars 
]      # end character class 
+      # repeat one or more time 
$      # string end 
~ix 
+2

'。?/'不是字符类中的元字符,也不需要转义。 '/'不管它是不是元字符,只要将它用作分隔符就只需要转义。每个字符都有它的字面含义,除了'] \^- '为了简单起见,您还可以更好地做'if(!preg_match('〜[^ a-z0-9&。/?]〜i'))' PCRE做的不多,我感觉。 – DaveRandom

+0

@DaveRandom编辑感谢! – ioseb

-1
if (preg_match('[^a-zA-Z0-9./?&]', 'azAZ09./?&')) { 
    //found a character that does not match! 
} else //regex failed, meaning all characters actually match 

非常相似ioseb的,但你需要包括A-Z,因为大写字母是小写来自不同。他已经写了一个伟大的指导人物已经所以我只是提出一个替代正则表达式。

我依赖于negation而不是(在开始时^,当包含在字符类'[]'的开头时,它具有不同的含义),接着是“允许的字符”字符串。

这样,如果正则表达式发现任何不是允许的字符([]表示一个字符),它将停止解析并返回true,这意味着找到了无效的字符串。

+0

使用'['和']'作为分隔符有点尴尬恕我直言。 – Shikiryu

+0

你是什么意思的分隔符?这只是一个角色的一组可能的值。无论如何,你会有什么呢? – xiankai

+0

PHP中的正则表达式模式具有:2个“分隔符”(我不知道这是否是好用的词)(通常是“/”,“#”或“〜”)。如果你不知道,你应该知道[^ xxx]的意思是“所有**但是** xxx”。因此,你是错的。 – Shikiryu