我正在尝试(在PHP中)
1.验证文本区域的内容是否有效
1.将它们分离到令牌中进行处理
为了被认为是有效的,它需要是一个只包含数字和字母的字符串,这些数字和字母构成一个长度为3-6的“代码”,并使用逗号分隔它们。我把它分解成这样:
[A-Za-z0-9]{3,6},
我有麻烦完成它虽然。我希望它们能够用逗号分隔,或者空格和逗号空格,逗号空格等。我只希望有一个逗号,如果有一个以下的有效令牌。
例如,输入字符串:
abe 123,PlE43,54drt,r2344
应分为以下标记:
'abe 123'和'PlE 43'和'54 drt'和'r2344'
我如何修复正则表达式以满足条件?(现在我在使逗号可选时遇到了麻烦,但如果它在那里,我希望另一个有效的标记,以及使用逗号和任何前后空格组合作为有效的分隔符)
5条答案
按热度按时间lrl1mhuk1#
假设你想折叠所有空格(即,标记内的空格和标记之间/逗号旁边的空格都应该被忽略),你可以通过一些预处理来更简单地完成它。
如果有两个连续的逗号,或者输入字符串以逗号结尾,这段代码也会报告错误,因为这会在
$tokens
中生成一个空元素,它不符合3到6的字母数字规则。See it in action。
更新:为了保留令牌内的空格,需要稍微修改一下:
不过要小心,因为它认为
是一个有效令牌。
tag5nh1u2#
假设要求:
下面是一个经过测试的PHP函数,它验证给定的字符串并返回一个包含有效令牌的数组。如果字符串无效,则返回false。
这个脚本使用两个主要的正则表达式;一个用于验证逗号分隔的令牌的整个字符串,另一个用于提取每个值。
****************************这个简化版本只允许逗号分隔的标记。
i5desfxk3#
试试这个:
lnlaulya4#
这个正则表达式可以完成这项工作。
它首先查找任意数量的标记,然后是sperator。然后它期望单个令牌。在这种情况下,逗号前后允许有任意数量的空格。你可能需要调整一下。
您的示例将不匹配,因为它在第一个标记中包含空格(没有逗号)。如果你想让它通过,你应该将空格添加到有效字符标记列表中。
nbewdwxp5#
我会使用以下代码:
这将把每个文本区域的内容放入捕获组1。请注意,我已经将您的
[A-Za-z0-9]
修改为[A-Za-z0-9\s]
,这将允许您的abe 123
示例中的空格。这也将修剪逗号周围的空格。请注意,这不会从字符串的开头和结尾处修剪空格。我建议你也修剪一下,保持一致。这样做的正则表达式是:
最新消息:如果你想忽略3-6个字符中的空格,你可以这样做: