drxpt06820 2016-08-15 07:41
浏览 55
已采纳

是字符集正则表达式

I am working on a project where i have to validate the BECS characters. Bulk Electronic Clearing System (BECS) only allowed the following characters.

BECS Character set

Type                        Description
Numeric                     0 to 9
Alphabetic                  Uppercase A to Z and Lowercase a to z
+                           Plus sign
-                           Minus sign or hyphen
@                           At sign
SP                          Blank space
$                           Dollar sign
!                           Exclamation mark
%                           Percentage sign
&                           Ampersand
(                           Left Parenthesis
)                           Right Parenthesis
*                           Asterik
.                           Period or decimal point
/                           Solidus (slash)
#                           Number Sign (Pound or Hash)
=                           Equal Sign
:                           Colon
;                           Semicolon
?                           Question mark
,                           Comma
’                           Apostrophe
[                           Left square bracket
]                           Right square bracket
_                           Low line (underscore)
^                           Circumflex

I have tried the following but not working:

preg_match("/^[A-Za-z0-9^_[]',?;:=#/.*()&%!$ @+-]+$/", $string);

  • 写回答

3条回答 默认 最新

  • dsai1991 2016-08-15 08:01
    关注

    Inside character classes, you don't need to escape most of the metacharacters.

    /^[A-Za-z0-9^_[\]',?;:=#\/.*()&%!$ @+-]+$/
    
    • ] is escaped to prevent it from closing the character class
    • / needs to be escaped because we're using it as regex delimiter
    • - doesn't need to be escaped because it's the last character in the class
    • ^ doesn't need to be escaped because it's not the first character in the class


    Or, if you want a shorter expression, the following regex covers the same range:

    /^[ !#-;=?-[\]^_a-z]+$/
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法