php正则表达式不允许字符串中的DOT

此处是我的代码,仅允许a-z和0-9。 如果我想要一个不允许包含点(。)的任何字符串的类似的regExp,我将如何修改它?</ p>

  if(preg_match('/ ^ [a-  z0-9 _] + $ /',$ myExtraField)== false){
</ code> </ pre>

这是在symfony2表单类中,不确定regExp是否相同 作为平面PHP因此我包括了我现在的regExp ...从来没有时间潜入regExp并且几乎没有使用它。</ p>
</ div>

展开原文

原文

Here is my code at the moment, allowing ONLY a-z and 0-9. If I wanted a similar regExp that will NOT allow any string containing a dot (.) how would I have to modify it?

if ( preg_match('/^[a-z0-9_]+$/',$myExtraField) == false ) {

This is inside a symfony2 form class, not sure whether the regExp is the same as flat PHP hence I included my present regExp... never had the time to dive into regExp and hardly ever use it.

donglong9745
donglong9745 为什么不进行另一个正则表达式:/\。/然后检查第一个是否为false,第二个是否为真。
6 年多之前 回复
doutan2228
doutan2228 你问一个允许除点之外的所有字符的模式?
6 年多之前 回复

4个回答



您可以做的最简单的检查是</ p>

  strpos($ myExtraField,“  。“)=== false 
</ code> </ pre>

如果你真的想使用正则表达式,你可以反转 preg_match(”/\。/“)</ 代码>或只是做一个像 preg_match(“/ ^ [^.]*$/")</ code> </ p>
</ div>的检查

展开原文

原文

The simplest check you could do would be

strpos($myExtraField, ".") === false

If you really wanted to use a regex, you could invert preg_match("/\./") or just do a check like preg_match("/^[^.]*$/")

douwa6220
douwa6220 你是对的,我现在感到愚蠢...所以我会改用if(strpos($ myExtraField,“。”)!== false){
6 年多之前 回复



在正则表达式中,您可以使用 ^ </ code>排除字符。</ p>
\ n

所以 / ^ [^。] + $ / </ code>将匹配任何不包含任何点的字符串。</ p>


  • 第一个 ^ </ code>表示'开始字符串'</ li>
  • [^。] + </ code>表示在leat one char </ li>
  • $ </ code>表示字符串的结尾</ li>
    </ ul>

使用 * </ code>代替 + </ code >如果你想匹配空字符串。</ p>
</ div>

展开原文

原文

In a regex, you can exclude a character by using the ^.

So /^[^.]+$/ will match any string that do not contain any dot.

  • The first ^ means 'start of the string'
  • [^.]+ means at leat one char
  • $ means end of the string

Use a * instead of the + if you want to match the empty string.

dongwen7730
dongwen7730 你需要它,因为/ [^。] +/将匹配任何至少有一个不是点的字符的东西。
6 年多之前 回复
dswsl2016
dswsl2016 我想你不需要第一个^和$
6 年多之前 回复



FWIW,你的正则表达式也允许使用下划线(“_”)字符。</ p>

如果你 想要一个不允许点的正则表达式,你可以简单地测试一个点的存在,并改变测试的意义:</ p>

  if(preg_match('/ \。  /',$ myExtraField)== true){
</ code> </ pre>

或者,使用 strpos </ code>可能更高效:</ p>

  if(strrpos($ myExtraField,'。')== -1){
</ code> </ pre>

然后没有'。' 存在...... </ p>
</ div>

展开原文

原文

FWIW, your regex also allows the underscore ("_") character.

If you want a regex that will disallow a dot, you can simply test for the existence of a dot, and change the sense of your test:

if ( preg_match('/\./',$myExtraField) == true ) {

Alternately, it may be more performant to use strpos:

if (strrpos($myExtraField, '.') == -1) { 

then no '.' is present...



如果必须使用正则表达式,请使用以下内容:</ p>

  if(  preg_match('/ ^ [^。] * $ /',$ myExtraField)){
//不包含句号
}其他{
//确实包含句号
}
</ code> < / PRE>

表达式:</ p>

 <代码> ^ [^] * $ 
</代码> </ PRE>

可视化:</ p>

</ p>
</ DIV>

展开原文

原文

If you must use a regex, then use the following:

if (preg_match('/^[^.]*$/',$myExtraField)) {
    // doesn't contain period
} else {
    // does contain period
}

Expression:

^[^.]*$

Visualization:

Regular expression visualization

dscss8996
dscss8996 不确定你在编辑时尝试做什么。 你能解释一下吗? :)
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问