我需要一个简单的正则表达式,它将在preg_replace中工作,它会将给定它的任何输入转换为以下规则:
1)第一个字符必须是A-Z或a-z
2)如果有超过1个字符,则后面的字符必须是A-Z,a-z,0-9或空格
我需要删除任何不符合要求的字符,并返回结果字符串。
我将此作为正则表达式字符串:
/^[a-zA-Z][a-zA-Z0-9 ]*$/
我有一点regex经验,所以我认为这应该有效,但是当我尝试一下这样的字符串时:
1Athsj294-djs
下面: http://www.functions-online.com/preg_replace.html
它不起作用,请帮忙。谢谢!
答案 0 :(得分:2)
$result = preg_replace('/^[^a-z]*([a-z][a-z0-9 ]*).*$/si', '\1', $subject);
更改
1Athsj294-djs
到
Athsj294
<强>解释强>
^ # Start of string
[^a-z]* # Match (optionally) any characters except ASCII letters
( # Match and capture...
[a-z] # one ASCII letter
[a-z0-9 ]* # zero or more ASCII letters/digits or spaces
) # End of capturing group
.* # Match the rest of the string
$ # Match the end of the string
/si
修饰符使正则表达式不区分大小写,并允许点匹配换行符。
答案 1 :(得分:0)
我认为您的正则表达式看起来没问题,除非您必须删除^
和$
所以它应该是
preg_match('/[a-zA-Z][a-zA-Z0-9 ]*/', $subject) // this is for preg_match though
preg_replace('/[^a-zA-Z]*([a-zA-Z][a-zA-Z0-9]*)[^a-zA-Z0-9]*/', '$1', '1Athsj294-djs') // for preg_replace
答案 2 :(得分:0)
嗯,您可以捕获preg_match('/^[a-zA-Z][a-zA-Z0-9 ]*/', $string, $matches)
例如,$ matches [0]将包含您的匹配。如果你想实际preg_replace需要前瞻。