我正在尝试构建一个regex解决方案,将表单中的输入转换为xxxx-xxxx的一致格式,其中x是0-9之间的数字字符我们遇到的常见输入错误以及它们应该转换为什么:-
xxx-xxx至xxxx-xxxx-
xx xxx xxx至xxxx-xxxx
xxxxxxxx至xxxx-xxxx
xxxx-xxxx至xxxx-xxxx
xxx-xxxx至xxx-xxxx
xx xx xxx至xxxx-xxxx
x=数字字符0-9
他们的简单正则表达式匹配和转换是否允许我们实现这一点?
您可以这样做:
$str = '123 - 4 5 6 7-8';
$res = strtr($str, [' '=>'', '-'=>'']);
$res = substr($res, 0, 4) . '-' . substr($res, 4);
去掉非数字,然后在前四位数字后添加一个-
。这也处理了xxxx.xxxx
、xxxx/xxxx
和其他任何东西:
$input = preg_replace(array('/[^0-9]/','/^('d{4})/'), array('','$1-'), $input);
您应该在之后进行检查,以确保长度符合您的需要,在这种情况下为9
:
if(strlen($input) != 9) { /* ERROR */ }
使用JavaScripthttp://jsfiddle.net/samirkumardas/kuujybzm/
var str = 'My ID: 3431 5443';
var pattern = /('b['d's-]{5,8}'d+'b)/;
var str = str.replace(pattern,'$1').replace(/[-'s]/g,'');
str = (str.length<8)?'0'+str:str; // if xxxx-xxx is fine, then don't need
str = str.replace(/('d{4})('d{1,4})/,' $1-$2');
alert(str);