我需要一个简单的正则表达式,它将在preg_replace中工作,并将给定的任何输入转换为以下规则:
1) 第一个字符必须是A-Z或A-Z
2) 如果超过1个字符,则以下字符必须是A-Z、A-Z、0-9或空格
我需要删除任何不一致的字符,并返回结果字符串。
我将其作为正则表达式字符串:
/^[a-zA-Z][a-zA-Z0-9 ]*$/
我有一点正则表达式的经验,所以我认为这应该有效,但当我尝试像这样的字符串时
1Athsj294-djs
此处:http://www.functions-online.com/preg_replace.html
它不起作用,请帮忙。谢谢
$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
修饰符使正则表达式不区分大小写,并允许点与换行符匹配。
例如,您可以捕获preg_match('/^[a-zA-Z][a-zA-Z0-9 ]*/', $string, $matches)
,$matches[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