are*_*icz 3 php string preg-match ereg
我正在研究字符串,我想知道哪种方法最好检查字符串是否只包含指定的字符集:
@ ? SP 0 ¡ P ¿ p
£ _ ! 1 A Q a q
$ ? " 2 B R b r
¥ ? # 3 C S c s
è ? ¤ 4 D T d t
é O % 5 E U e u
ù ? & 6 F V f v
ì ? ' 7 G W g w
ò ? ( 8 H X h x
Ç ? ) 9 I Y i y
LF ? * : J Z j z
Ø 1) + ; K Ä k ä
ø Æ , < L Ö l ö
CR æ q = M Ñ m ñ
Å ß . > N Ü n ü
å É / ? O § o à
Run Code Online (Sandbox Code Playgroud)
我试图通过eregi和regexp完成它,但没有成功.另一种方法是将每个char转换为十进制并检查它是否小于<137,或者通过in_array()检查每个元素 - 我觉得它很弱.
谁有更好的解决方案?
提前致谢.
我看到你已经接受了另一个答案,但我想解释为什么你的正则表达式的尝试不起作用.希望它能帮到你.
首先,我在你的标签中注意到了这个问题的ereg.请注意,PHP的ereg_功能已被弃用; 你应该只使用这些preg_功能.
现在,如果要将regex用于此类事情,通常会使用否定字符类来定义要允许的字符列表,然后查找其他任何内容.
字符类是用方括号括起来的字符列表.您可以通过在其开头添加克拉符号来否定字符类.因此,如果您想要一个仅包含"A","B"或"C"的字符串,并且您希望收到包含其他任何内容的字符串的警告,您可以使用以下内容:
$result = preg_match("/[^ABC]/",$mystring);
Run Code Online (Sandbox Code Playgroud)
您的示例基本相同(但显然需要更多字符进行测试),除了两点:首先,列表中的字符是Regex中的保留字符,其次,您使用的是非Ascii字符.
可以通过使用前导反斜杠转义它们来处理正则表达式保留字符.您只需要知道保留了哪些字符.看着你的列表中,我看到?,/,.和+.
第二点解释了为什么你不能使用它ereg,因为这些ereg函数不支持unicode.切换到使用这些preg功能,你会有更多的运气.
您仍然需要为正则表达式引擎指定您正在寻找unicode字符.这是通过将u修饰符添加到正则表达式字符串的末尾来完成的.
因此,查询的缩短版本可能如下所示:
$result = preg_match("/[^è?¤4DTdt]/u",$mystring);
Run Code Online (Sandbox Code Playgroud)
它看起来像你,包括你的人物的名单新的生产线,所以您可能还需要添加多行修改m旁边那个u.
对于无法写入的字符(或者对于任何字符,如果更容易),您可以为其unicode字符代码添加转义序列.使用\uFFFF这里FFFF是要匹配的字符十六进制的Unicode基准-例如\u00E0相匹配à.
我希望这能让您更好地了解正则表达式.我应该补充一点,我并不是说正则表达式必然是这个问题的最佳解决方案,也不一定是唯一的解决方案.我试图通过使用否定的字符类来使它最佳地执行(这意味着它一旦找到不匹配的字符就会失败,并且应该防止过多的回溯,这可能导致正则表达式有时很慢),所以它应该是合理的性能,但我没有测试它与其他解决方案.
我希望有所帮助.
| 归档时间: |
|
| 查看次数: |
8919 次 |
| 最近记录: |