我在使用正则表达式时遇到了麻烦。我想使用php preg_match来确认字符串是否仅包含大写/小写字母,数字,空格和标点符号,如...
逗号,句号,加号,短划线,感叹号,冒号,分号,括号
问题:下面的例子中$ regex会等于什么?
<?php
$regex = "??????";
$string = "some user input in a form passed via POST to form processor";
if (preg_match($regex, $string)) {
echo "Found a match!";
} else {
echo "The regex pattern does not match. :(";
}
?>
我观看了视频,谷歌搜索了几个小时但仍然无法做到这一点。
感谢您的帮助!
答案 0 :(得分:1)
您可以使用character class列出要允许的字符。
如果您想匹配大写和小写字符,可以将A-Za-z
缩短为a-z
并指定不区分大小写的标记/i
。
断言字符串^
开头的位置,匹配字符类中的字符一次或多次+
,并在字符串$
的末尾断言位置。
<?php
$regex = "/^[ a-z0-9,.+!:;()-]+$/i";
$string = "some user input in a form passed via POST to form processor";
if (preg_match($regex, $string)) {
echo "Found a match!";
} else {
echo "The regex pattern does not match. :(";
}
?>
答案 1 :(得分:0)
{{1}}
参见示例:Regex for only allowing letters, numbers, space, commas, periods?
答案 2 :(得分:0)
尝试这种模式
$regex = "/^[A-Za-z0-9...]+$/";
您应该使用允许的特殊字符替换...
和9
之间的3个点]
。
示例:
// Adding comma (,) only
$regex = "/^[A-Za-z0-9,]+$/";
// Adding comma (,) and period (.)
$regex = "/^[A-Za-z0-9,.]+$/";
// comma and plus sign (+) note that plus/minus signs need to be escaped \+\-
$regex = "/^[A-Za-z0-9,\+\]+$/";
你问的完整字符串是:
// comma, period, plus sign, dash, exclamation mark, colon, semi colon, parentheses, space is (\s)
$regex = "/^[A-Za-z0-9,.\+\-!:;()\s]+$/";
如果允许使用下划线字符(_)
,则可以使用[\w...]
代替[A-Za-z0-9...]
您可以对其进行测试here
答案 3 :(得分:0)
所有答案都很有帮助。第四只鸟的答案对我有用。感谢。
我添加了一些额外的标点符号和3个需要转义的标记......并且(到目前为止)最终得到了...
$regex = "/^[ a-z0-9,.+!:;()-_\\\[\]]+$/i";
我发布的解释只是为了帮助其他可能会遇到此问题的人。希望它可以帮助别人帮助我。
对于任何可能需要它的人都会有解释(如果有任何修改,欢迎更正: - )
string validation: items within in [] are allowed
/ beginning regex expression delimiter
^ says start trying to match with 1st item in []
[ enclouses OK items - start
blank space character
a-z lower case letters
0-9 numbers
, comma
. period
+ plus sign
! exclamation mark
: colon
; semicolon
( open paren
) close paren
- dash
_ underscore
\\ back slash (note)
\[ open square bracket (note)
\] close speare bracket (note)
] encloses OK items - end
+ match indicated items 1 or more times
$ continue matching through the last item in the string
/ is the closing regex expression delimiter
i case insensitive flag so upper and lower case letters will match
注意:前导反斜杠是转义字符