簡體   English   中英

php 正則表達式只允許字符串中的英文字符

[英]php regex allow only english characters in string

我想只在文本框中插入英文字符和其他特殊字符,例如

$!@{]{[

ETC...

但我也想檢查字符串是否包含至少 2 個字符:(a-zA-Z0-9)

所以我想到了這個:

preg_match('/[^a-zA-Z0-9 -"?()[]#:/\'_+*%@!~`$><,.;{}|\]/',$string)

這是一個好方法嗎?

不,你的方法不好

試試這個。 你需要把你想要的特殊字符補全成字符class。 您需要轉義]\-^字符,因為它們在 class 中具有特殊含義(取決於它們的位置)。

^(?=.*[A-Za-z0-9].*[A-Za-z0-9])[$!@{}[\]A-Za-z0-9]*$

在 Regexr 上查看

第一部分是積極的前瞻,確保您的[A-Za-z0-9]要求的兩個字符在字符串中的某個位置。

然后是字符 class [A-Za-z0-9])[$!@\{\}\[\]A-Za-z0-9] ,您可以在其中輸入要匹配的字符。

我的表達式開頭的^確保它從開頭匹配,末尾的$確保它匹配字符串的結尾。

示例開頭的^是對完整字符 class 的否定,我猜你不想要什么,如果你想匹配字符^把它放在 class 的其他地方。 class 中間的-定義了一個與-"中的所有內容匹配的字符范圍,我不知道是什么字符,但可能比你想要的更多。將-放在開頭或結尾或轉義它。

$parameter ='(a-zA-Z){2}';
if $string='kasdfhk890';

preg_match($string,$parameter); // 
return false;

if $string='k';


preg_match($string,$parameter); // single char error
return false;

if $string='kuyyee';

preg_match($string,$parameter);// english character only
return true;

你想了解更多試試這個鏈接

(?:.*?[0-9a-zA-Z]){2,}[0-9a-zA-Z$!@{\]{\[]*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM